OpenPinch 0.7.3__tar.gz → 0.7.4__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.
Files changed (426) hide show
  1. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/accessors/design.py +13 -5
  2. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/input/utilities.py +38 -21
  3. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/commands.py +31 -5
  4. {openpinch-0.7.3 → openpinch-0.7.4}/PKG-INFO +6 -1
  5. {openpinch-0.7.3 → openpinch-0.7.4}/README.md +5 -0
  6. {openpinch-0.7.3 → openpinch-0.7.4}/pyproject.toml +1 -1
  7. {openpinch-0.7.3 → openpinch-0.7.4}/.gitignore +0 -0
  8. {openpinch-0.7.3 → openpinch-0.7.4}/LICENSE +0 -0
  9. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/__init__.py +0 -0
  10. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/__main__.py +0 -0
  11. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/adapters/__init__.py +0 -0
  12. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/adapters/io/__init__.py +0 -0
  13. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/adapters/io/csv.py +0 -0
  14. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/adapters/io/file_exports.py +0 -0
  15. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/adapters/io/json.py +0 -0
  16. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/adapters/io/problem_sources.py +0 -0
  17. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/adapters/io/records.py +0 -0
  18. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/adapters/io/tabular.py +0 -0
  19. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/adapters/io/workbook.py +0 -0
  20. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/adapters/io/workspace_bundles.py +0 -0
  21. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/adapters/optional_dependencies.py +0 -0
  22. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/__init__.py +0 -0
  23. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/economics.py +0 -0
  24. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/energy_transfer/__init__.py +0 -0
  25. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/energy_transfer/cascade.py +0 -0
  26. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/energy_transfer/diagram.py +0 -0
  27. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/energy_transfer/selection.py +0 -0
  28. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/energy_transfer/serialization.py +0 -0
  29. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/energy_transfer/service.py +0 -0
  30. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/exergy/__init__.py +0 -0
  31. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/exergy/service.py +0 -0
  32. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/graphs/__init__.py +0 -0
  33. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/graphs/composite.py +0 -0
  34. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/graphs/grand_composite.py +0 -0
  35. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/graphs/metadata.py +0 -0
  36. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/graphs/primitives.py +0 -0
  37. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/graphs/service.py +0 -0
  38. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/graphs/specifications.py +0 -0
  39. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/__init__.py +0 -0
  40. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/context.py +0 -0
  41. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/controllability.py +0 -0
  42. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/duty_optimisation.py +0 -0
  43. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/errors.py +0 -0
  44. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/execution/__init__.py +0 -0
  45. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/execution/executor.py +0 -0
  46. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/execution/fake_executor.py +0 -0
  47. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/execution/fallbacks.py +0 -0
  48. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/execution/pathways.py +0 -0
  49. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/execution/settings.py +0 -0
  50. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/execution/task_builders.py +0 -0
  51. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/extraction/__init__.py +0 -0
  52. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/extraction/metadata.py +0 -0
  53. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/extraction/period_state.py +0 -0
  54. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/extraction/recovery.py +0 -0
  55. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/extraction/segment_area.py +0 -0
  56. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/extraction/service.py +0 -0
  57. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/extraction/utility.py +0 -0
  58. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/indexing.py +0 -0
  59. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/__init__.py +0 -0
  60. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_base/__init__.py +0 -0
  61. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_base/alpha.py +0 -0
  62. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_base/approach.py +0 -0
  63. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_base/area.py +0 -0
  64. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_base/costing.py +0 -0
  65. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_base/execution.py +0 -0
  66. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_base/parameters.py +0 -0
  67. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_base/piecewise.py +0 -0
  68. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_base/superstructure.py +0 -0
  69. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_pinch_design/__init__.py +0 -0
  70. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_pinch_design/amalgamation.py +0 -0
  71. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_pinch_design/equations.py +0 -0
  72. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_pinch_design/postprocess.py +0 -0
  73. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_pinch_design/preprocessing.py +0 -0
  74. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/__init__.py +0 -0
  75. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/equations.py +0 -0
  76. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/evolution.py +0 -0
  77. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/objectives.py +0 -0
  78. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/postprocess.py +0 -0
  79. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/setup.py +0 -0
  80. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/verification.py +0 -0
  81. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/_stagewise/warm_start.py +0 -0
  82. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/base.py +0 -0
  83. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/fixed_structure.py +0 -0
  84. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/packed_pinch_design.py +0 -0
  85. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/packed_stagewise.py +0 -0
  86. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/pinch_decomposition.py +0 -0
  87. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/problem.py +0 -0
  88. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/stage_packing.py +0 -0
  89. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/stagewise.py +0 -0
  90. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/models/thermal_profiles.py +0 -0
  91. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/prepared_problem.py +0 -0
  92. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/reporting/__init__.py +0 -0
  93. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/reporting/exports.py +0 -0
  94. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/reporting/ranking.py +0 -0
  95. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/reporting/verification.py +0 -0
  96. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/results/__init__.py +0 -0
  97. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/results/assembly.py +0 -0
  98. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/results/seeds.py +0 -0
  99. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/results/selection.py +0 -0
  100. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/service.py +0 -0
  101. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/solver/__init__.py +0 -0
  102. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/solver/arrays.py +0 -0
  103. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/solver/backend.py +0 -0
  104. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/solver/dependencies.py +0 -0
  105. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/solver/piecewise.py +0 -0
  106. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/solver/pinch_design_decomposition.py +0 -0
  107. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/targeting/__init__.py +0 -0
  108. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/targeting/_stage.py +0 -0
  109. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/targeting/network_evolution_method.py +0 -0
  110. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/targeting/open_hens_method.py +0 -0
  111. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/targeting/pinch_design_method.py +0 -0
  112. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/targeting/thermal_derivative_method.py +0 -0
  113. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_exchanger_networks/targeting/topology.py +0 -0
  114. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/__init__.py +0 -0
  115. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_multiperiod/__init__.py +0 -0
  116. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_multiperiod/aggregation.py +0 -0
  117. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_multiperiod/execution.py +0 -0
  118. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_multiperiod/preparation.py +0 -0
  119. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_multiperiod/setup.py +0 -0
  120. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_multiperiod/state.py +0 -0
  121. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_process_mvr/__init__.py +0 -0
  122. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_process_mvr/membership.py +0 -0
  123. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_process_mvr/replacement_streams.py +0 -0
  124. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_process_mvr/selection.py +0 -0
  125. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_process_mvr/state.py +0 -0
  126. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_process_mvr/values.py +0 -0
  127. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/_process_mvr/work.py +0 -0
  128. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/__init__.py +0 -0
  129. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/_shared/__init__.py +0 -0
  130. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/_shared/air.py +0 -0
  131. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/_shared/plotting.py +0 -0
  132. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/_shared/streams.py +0 -0
  133. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/encoding.py +0 -0
  134. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/layout.py +0 -0
  135. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/load_selection.py +0 -0
  136. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/multi_vc_objective.py +0 -0
  137. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/postprocessing.py +0 -0
  138. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/preprocessing.py +0 -0
  139. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/shared.py +0 -0
  140. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/common/units.py +0 -0
  141. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/components.py +0 -0
  142. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/cycles/__init__.py +0 -0
  143. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/cycles/_multi_cycle_base.py +0 -0
  144. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/cycles/brayton_heat_pump.py +0 -0
  145. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/cycles/carnot_cycles.py +0 -0
  146. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/cycles/cascade_vapour_compression_cycle.py +0 -0
  147. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/cycles/mechanical_vapour_recompression_cycle.py +0 -0
  148. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/cycles/parallel_vapour_compression_cycles.py +0 -0
  149. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/cycles/vapour_compression_cycle.py +0 -0
  150. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/cycles/vapour_compression_mvr_cascade.py +0 -0
  151. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/direct_mvr/__init__.py +0 -0
  152. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/direct_mvr/execution.py +0 -0
  153. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/direct_mvr/models.py +0 -0
  154. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/direct_mvr/thermodynamics.py +0 -0
  155. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/direct_mvr/units.py +0 -0
  156. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/optimisation_adapter.py +0 -0
  157. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/__init__.py +0 -0
  158. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/adapters/__init__.py +0 -0
  159. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/adapters/coolprop.py +0 -0
  160. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/adapters/tespy.py +0 -0
  161. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/characteristics/__init__.py +0 -0
  162. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/characteristics/openpinch-single-stage-compressor-v1.json +0 -0
  163. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/context.py +0 -0
  164. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/coolprop_preflight.py +0 -0
  165. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/errors.py +0 -0
  166. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/factory.py +0 -0
  167. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/fluids.py +0 -0
  168. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/generation.py +0 -0
  169. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/models.py +0 -0
  170. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/points.py +0 -0
  171. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/protocols.py +0 -0
  172. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/provenance.py +0 -0
  173. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/resources.py +0 -0
  174. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/settings.py +0 -0
  175. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/target_basis.py +0 -0
  176. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/target_records.py +0 -0
  177. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/targeting.py +0 -0
  178. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/performance_maps/targeting_models.py +0 -0
  179. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/process_mvr.py +0 -0
  180. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/service.py +0 -0
  181. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/targeting/__init__.py +0 -0
  182. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/targeting/_carnot_common.py +0 -0
  183. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/targeting/brayton.py +0 -0
  184. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/targeting/cascade_carnot.py +0 -0
  185. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/targeting/cascade_vapour_compression.py +0 -0
  186. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/targeting/parallel_carnot.py +0 -0
  187. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/targeting/parallel_vapour_compression.py +0 -0
  188. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_pumps/targeting/vapour_compression_mvr.py +0 -0
  189. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/heat_transfer.py +0 -0
  190. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/numerics.py +0 -0
  191. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/orc/__init__.py +0 -0
  192. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/orc/carnot.py +0 -0
  193. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/orc/costing.py +0 -0
  194. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/orc/cycle.py +0 -0
  195. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/orc/inputs.py +0 -0
  196. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/orc/profile.py +0 -0
  197. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/orc/search.py +0 -0
  198. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/orc/service.py +0 -0
  199. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/orc/simulated.py +0 -0
  200. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/parallelism.py +0 -0
  201. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/power/__init__.py +0 -0
  202. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/power/service.py +0 -0
  203. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/power/steam_turbine.py +0 -0
  204. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/targeting/__init__.py +0 -0
  205. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/targeting/area_cost.py +0 -0
  206. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/targeting/cascade.py +0 -0
  207. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/targeting/context.py +0 -0
  208. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/targeting/direct.py +0 -0
  209. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/targeting/grand_composite.py +0 -0
  210. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/targeting/heat_recovery_dt_min.py +0 -0
  211. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/targeting/indirect.py +0 -0
  212. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/targeting/residual.py +0 -0
  213. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/targeting/temperature_driving_force.py +0 -0
  214. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/targeting/utilities.py +0 -0
  215. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/thermodynamics/__init__.py +0 -0
  216. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/thermodynamics/water.py +0 -0
  217. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/__init__.py +0 -0
  218. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/allocation.py +0 -0
  219. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/bounds.py +0 -0
  220. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/codec.py +0 -0
  221. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/context.py +0 -0
  222. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/errors.py +0 -0
  223. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/evaluation.py +0 -0
  224. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/normalization.py +0 -0
  225. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/optimisation.py +0 -0
  226. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/penalties.py +0 -0
  227. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/profiles.py +0 -0
  228. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/replay.py +0 -0
  229. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/service.py +0 -0
  230. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/start_points.py +0 -0
  231. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/thermodynamics.py +0 -0
  232. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/analysis/utility_placement/units.py +0 -0
  233. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/__init__.py +0 -0
  234. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/__init__.py +0 -0
  235. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/accessors/__init__.py +0 -0
  236. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/accessors/component.py +0 -0
  237. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/accessors/plot.py +0 -0
  238. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/accessors/target.py +0 -0
  239. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/arguments.py +0 -0
  240. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/input/__init__.py +0 -0
  241. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/input/canonicalization.py +0 -0
  242. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/input/construction.py +0 -0
  243. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/input/loading.py +0 -0
  244. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/input/segments.py +0 -0
  245. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/input/semantics.py +0 -0
  246. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/input/validation.py +0 -0
  247. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/output/__init__.py +0 -0
  248. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/output/reporting.py +0 -0
  249. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/output/result_extraction.py +0 -0
  250. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/periods/__init__.py +0 -0
  251. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/periods/aggregation.py +0 -0
  252. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/targeting/__init__.py +0 -0
  253. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/targeting/catalog.py +0 -0
  254. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/targeting/dispatch.py +0 -0
  255. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/targeting/execution.py +0 -0
  256. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/targeting/provenance.py +0 -0
  257. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_problem/targeting/state.py +0 -0
  258. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_workspace/__init__.py +0 -0
  259. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_workspace/case_inputs.py +0 -0
  260. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/_workspace/state.py +0 -0
  261. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/case_derivation.py +0 -0
  262. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/heat_recovery_dt_min.py +0 -0
  263. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/hpr_selection.py +0 -0
  264. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/problem.py +0 -0
  265. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/residual_utility.py +0 -0
  266. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/targeting.py +0 -0
  267. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/utility_placement.py +0 -0
  268. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/application/workspace.py +0 -0
  269. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/__init__.py +0 -0
  270. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/common.py +0 -0
  271. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/controllability.py +0 -0
  272. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/graphs.py +0 -0
  273. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/heat_recovery_dt_min.py +0 -0
  274. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/hpr.py +0 -0
  275. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/hpr_performance_map.py +0 -0
  276. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/input.py +0 -0
  277. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/output.py +0 -0
  278. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/report_metrics.py +0 -0
  279. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/report_units.py +0 -0
  280. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/reporting.py +0 -0
  281. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/resources/__init__.py +0 -0
  282. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/resources/hpr_performance_map/__init__.py +0 -0
  283. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/resources/hpr_performance_map/heat-pump-1.0.json +0 -0
  284. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/resources/hpr_performance_map/refrigeration-1.0.json +0 -0
  285. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/resources/hpr_performance_map/schema-1.0.json +0 -0
  286. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/schema.py +0 -0
  287. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/synthesis/__init__.py +0 -0
  288. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/synthesis/common.py +0 -0
  289. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/synthesis/method.py +0 -0
  290. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/synthesis/result.py +0 -0
  291. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/synthesis/task.py +0 -0
  292. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/synthesis/topology.py +0 -0
  293. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/synthesis/view.py +0 -0
  294. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/turbine.py +0 -0
  295. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/units.py +0 -0
  296. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/utility_placement.py +0 -0
  297. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/contracts/workspace.py +0 -0
  298. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/__init__.py +0 -0
  299. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_heat_exchanger/__init__.py +0 -0
  300. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_heat_exchanger/area.py +0 -0
  301. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_heat_exchanger/period_state.py +0 -0
  302. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_heat_exchanger/rules.py +0 -0
  303. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_heat_exchanger_network/__init__.py +0 -0
  304. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_heat_exchanger_network/types.py +0 -0
  305. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_problem_table/__init__.py +0 -0
  306. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_problem_table/constants.py +0 -0
  307. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_problem_table/equality.py +0 -0
  308. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_problem_table/intervals.py +0 -0
  309. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_problem_table/types.py +0 -0
  310. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_stream/__init__.py +0 -0
  311. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_stream/linearisation.py +0 -0
  312. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_stream/profile.py +0 -0
  313. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_stream/segment.py +0 -0
  314. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_stream/segments.py +0 -0
  315. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_stream/thermodynamics.py +0 -0
  316. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_stream/value_state.py +0 -0
  317. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_stream_collection/__init__.py +0 -0
  318. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_stream_collection/filters.py +0 -0
  319. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_stream_collection/numeric_view.py +0 -0
  320. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_stream_collection/serialization.py +0 -0
  321. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_stream_collection/sorting.py +0 -0
  322. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_validation.py +0 -0
  323. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_value/__init__.py +0 -0
  324. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_value/coercion.py +0 -0
  325. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_value/resolution.py +0 -0
  326. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/_value/units.py +0 -0
  327. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/analysis.py +0 -0
  328. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/configuration.py +0 -0
  329. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/configuration_fields.py +0 -0
  330. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/enums.py +0 -0
  331. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/fluids.py +0 -0
  332. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/heat_exchanger.py +0 -0
  333. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/heat_exchanger_network.py +0 -0
  334. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/hpr.py +0 -0
  335. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/problem_table.py +0 -0
  336. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/progress.py +0 -0
  337. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/solver_options.py +0 -0
  338. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/stream.py +0 -0
  339. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/stream_collection.py +0 -0
  340. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/targets.py +0 -0
  341. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/value.py +0 -0
  342. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/domain/zone.py +0 -0
  343. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/__init__.py +0 -0
  344. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/backends/__init__.py +0 -0
  345. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/backends/_multistart.py +0 -0
  346. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/backends/_surrogate.py +0 -0
  347. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/backends/bayesian.py +0 -0
  348. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/backends/cma_es.py +0 -0
  349. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/backends/dual_annealing.py +0 -0
  350. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/backends/protocol.py +0 -0
  351. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/backends/rbf.py +0 -0
  352. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/candidates.py +0 -0
  353. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/errors.py +0 -0
  354. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/execution.py +0 -0
  355. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/feasibility.py +0 -0
  356. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/models.py +0 -0
  357. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/optimisation/service.py +0 -0
  358. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/__init__.py +0 -0
  359. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/configuration.py +0 -0
  360. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/configuration_text.py +0 -0
  361. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/dashboard/__init__.py +0 -0
  362. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/dashboard/dashboard.css +0 -0
  363. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/dashboard/dependencies.py +0 -0
  364. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/dashboard/exports.py +0 -0
  365. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/dashboard/rendering.py +0 -0
  366. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/dashboard/state.py +0 -0
  367. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/graphs/__init__.py +0 -0
  368. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/graphs/plotly.py +0 -0
  369. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/graphs/problem.py +0 -0
  370. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/graphs/simple.py +0 -0
  371. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/__init__.py +0 -0
  372. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/_constants.py +0 -0
  373. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/dependencies.py +0 -0
  374. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/geometry.py +0 -0
  375. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/labels.py +0 -0
  376. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/layout.py +0 -0
  377. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/plotly.py +0 -0
  378. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/rendering.py +0 -0
  379. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/results.py +0 -0
  380. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/service.py +0 -0
  381. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/state.py +0 -0
  382. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/temperatures.py +0 -0
  383. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/network_grid/view.py +0 -0
  384. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/reporting/__init__.py +0 -0
  385. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/reporting/adapters.py +0 -0
  386. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/reporting/excel_text.py +0 -0
  387. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/reporting/hpr.py +0 -0
  388. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/reporting/problem_table.py +0 -0
  389. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/reporting/results.py +0 -0
  390. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/reporting/specialist.py +0 -0
  391. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/reporting/stream_collection.py +0 -0
  392. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/reporting/thermal.py +0 -0
  393. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/presentation/reporting/workbook.py +0 -0
  394. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/resources.py +0 -0
  395. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/__init__.py +0 -0
  396. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/01_first_solve_and_core_curves.ipynb +0 -0
  397. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/02_focused_direct_and_total_site.ipynb +0 -0
  398. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/03_multisegment_streams.ipynb +0 -0
  399. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/04_workspace_cases_and_scenarios.ipynb +0 -0
  400. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/05_workspace_persistence.ipynb +0 -0
  401. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/06_multiperiod_heat_integration.ipynb +0 -0
  402. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/07_area_cost_and_exergy.ipynb +0 -0
  403. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/08_carnot_heat_pump_and_refrigeration.ipynb +0 -0
  404. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/09_vapour_compression.ipynb +0 -0
  405. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/10_multiperiod_heat_pumps.ipynb +0 -0
  406. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/11_process_mvr_and_cascade.ipynb +0 -0
  407. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/12_cogeneration.ipynb +0 -0
  408. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/13_multiperiod_cogeneration.ipynb +0 -0
  409. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/14_energy_transfer.ipynb +0 -0
  410. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/15_hen_synthesis_and_selection.ipynb +0 -0
  411. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/16_advanced_hen_methods.ipynb +0 -0
  412. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/17_multiperiod_hen_synthesis.ipynb +0 -0
  413. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/18_results_plots_reports_exports.ipynb +0 -0
  414. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/19_utility_placement_optimisation.ipynb +0 -0
  415. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/notebooks/__init__.py +0 -0
  416. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/sample_cases/Four-stream-Yee-and-Grossmann-1990-1.json +0 -0
  417. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/sample_cases/__init__.py +0 -0
  418. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/sample_cases/basic_pinch.json +0 -0
  419. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/sample_cases/chocolate_factory.json +0 -0
  420. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/sample_cases/crude_preheat_train.json +0 -0
  421. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/sample_cases/crude_preheat_train_multiperiod.json +0 -0
  422. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/sample_cases/dairy_chilling_multiperiod.json +0 -0
  423. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/sample_cases/process_mvr.json +0 -0
  424. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/sample_cases/pulp_mill.json +0 -0
  425. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/sample_cases/zonal_site.json +0 -0
  426. {openpinch-0.7.3 → openpinch-0.7.4}/OpenPinch/tutorials/sample_cases/zonal_site_multiperiod.json +0 -0
@@ -20,6 +20,18 @@ if TYPE_CHECKING:
20
20
  from ...problem import PinchProblem
21
21
 
22
22
 
23
+ class UtilityChoiceError(ValueError):
24
+ """A heater or cooler names no utility, and its side has several to choose from."""
25
+
26
+ def __init__(self, side: str, utilities: Sequence[str]) -> None:
27
+ super().__init__(
28
+ f"pass {side}_utility explicitly; the problem defines "
29
+ f"{len(utilities)} {side} utilities ({', '.join(utilities)})."
30
+ )
31
+ self.side = side
32
+ self.utilities = tuple(utilities)
33
+
34
+
23
35
  def _set_if_supplied(values: dict[str, Any], key: str, value: Any) -> None:
24
36
  if value is not None:
25
37
  values[key] = value
@@ -479,11 +491,7 @@ class _DesignAccessor:
479
491
  if getattr(utility.type, "value", utility.type) == kind
480
492
  ]
481
493
  if len(names) != 1:
482
- side = kind.lower()
483
- raise ValueError(
484
- f"pass {side}_utility explicitly; the problem defines "
485
- f"{len(names)} {side} utilities."
486
- )
494
+ raise UtilityChoiceError(kind.lower(), names)
487
495
  return names[0]
488
496
 
489
497
  def optimise_duties(
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  from collections.abc import Mapping
6
6
  from copy import deepcopy
7
- from typing import List, Tuple
7
+ from typing import List, Sequence, Tuple
8
8
 
9
9
  import numpy as np
10
10
 
@@ -82,7 +82,7 @@ def _get_hot_and_cold_utilities(
82
82
  cu_t_max=cu_t_max,
83
83
  dt_cont_multiplier=placement,
84
84
  )
85
- utilities_with_defaults = _add_default_utilities(
85
+ utilities_with_defaults, defaults = _add_default_utilities(
86
86
  utilities=utilities_filled,
87
87
  config=config,
88
88
  add_default_hu=add_default_hu,
@@ -91,28 +91,23 @@ def _get_hot_and_cold_utilities(
91
91
  cu_t_max=cu_t_max,
92
92
  dt_cont_multiplier=placement,
93
93
  )
94
+ # The streams built from the defaults this preparation added are marked
95
+ # (by identity, never by name: a given utility may be called HU or CU, and
96
+ # the collection may rename either), so targeting uses them only as a backup.
94
97
  hot_utilities, utilities_left = _create_utilities_list(
95
98
  utilities=utilities_with_defaults,
96
99
  utility_type=StreamType.Hot.value,
97
100
  dt_cont_multiplier=dt_cont_multiplier,
98
101
  config=config,
102
+ defaults=defaults,
99
103
  )
100
104
  cold_utilities, _ = _create_utilities_list(
101
105
  utilities=utilities_left,
102
106
  utility_type=StreamType.Cold.value,
103
107
  dt_cont_multiplier=dt_cont_multiplier,
104
108
  config=config,
109
+ defaults=defaults,
105
110
  )
106
- # Mark the defaults this preparation added (never a user utility that is
107
- # merely named HU or CU), so targeting uses them only as a backup.
108
- for added, collection, name in (
109
- (add_default_hu, hot_utilities, "HU"),
110
- (add_default_cu, cold_utilities, "CU"),
111
- ):
112
- if added:
113
- for stream in collection:
114
- if stream.name == name:
115
- mark_default_utility(stream)
116
111
  prepared = hot_utilities + cold_utilities
117
112
  period_ids = {
118
113
  str(period_id): index
@@ -379,12 +374,26 @@ def _add_default_utilities(
379
374
  hu_t_min: float,
380
375
  cu_t_max: float,
381
376
  dt_cont_multiplier: float = 1.0,
382
- ) -> List[UtilitySchema]:
383
- """Add default hot and cold utilities to the list of utilities."""
377
+ ) -> Tuple[List[UtilitySchema], List[UtilitySchema]]:
378
+ """Add default hot and cold utilities to the list; also return the defaults.
379
+
380
+ A default is named HU or CU, or HU_1, CU_1, ... when a given utility
381
+ already has that name, so the given one keeps its name.
382
+ """
383
+ taken = {utility.name for utility in utilities}
384
+
385
+ def free(name: str) -> str:
386
+ chosen, counter = name, 1
387
+ while chosen in taken:
388
+ chosen, counter = f"{name}_{counter}", counter + 1
389
+ taken.add(chosen)
390
+ return chosen
391
+
392
+ defaults: List[UtilitySchema] = []
384
393
  if add_default_hu:
385
- utilities.append(
394
+ defaults.append(
386
395
  _create_default_utility(
387
- "HU",
396
+ free("HU"),
388
397
  StreamType.Hot.value,
389
398
  hu_t_min,
390
399
  config,
@@ -392,16 +401,17 @@ def _add_default_utilities(
392
401
  )
393
402
  )
394
403
  if add_default_cu:
395
- utilities.append(
404
+ defaults.append(
396
405
  _create_default_utility(
397
- "CU",
406
+ free("CU"),
398
407
  StreamType.Cold.value,
399
408
  cu_t_max,
400
409
  config,
401
410
  dt_cont_multiplier=dt_cont_multiplier,
402
411
  )
403
412
  )
404
- return utilities
413
+ utilities.extend(defaults)
414
+ return utilities, defaults
405
415
 
406
416
 
407
417
  def _create_default_utility(
@@ -435,8 +445,13 @@ def _create_utilities_list(
435
445
  utility_type: str,
436
446
  dt_cont_multiplier: float = 1.0,
437
447
  config: Configuration = Configuration(),
448
+ defaults: Sequence[UtilitySchema] = (),
438
449
  ) -> Tuple[StreamCollection, List[UtilitySchema]]:
439
- """Create a sorted list of hot or cold Stream objects based on type."""
450
+ """Create a sorted list of hot or cold Stream objects based on type.
451
+
452
+ The stream built from each utility in ``defaults`` (the default HU and CU
453
+ added by preparation) is marked as a default utility.
454
+ """
440
455
  created_utilities = StreamCollection()
441
456
  unassigned_utilities = utilities
442
457
 
@@ -520,8 +535,10 @@ def _create_utilities_list(
520
535
  fluid_name=selected.fluid_name,
521
536
  fluid_phase=selected.fluid_phase,
522
537
  )
538
+ if any(selected is default for default in defaults):
539
+ mark_default_utility(created)
523
540
  created_utilities.add(created, key)
524
- created_utilities[key].delta_t_contribution_multiplier = dt_cont_multiplier
541
+ created.delta_t_contribution_multiplier = dt_cont_multiplier
525
542
  if selected.type == utility_type:
526
543
  selected.active = False
527
544
 
@@ -38,7 +38,10 @@ from ..domain.targets import BaseTargetModel
38
38
  from ..presentation.configuration import configuration_field_metadata
39
39
  from ..presentation.reporting.hpr import hpr_failure_summary
40
40
  from ..presentation.reporting.results import serialize_target
41
- from ._problem.accessors.design import HeatExchangerNetworkDesignView
41
+ from ._problem.accessors.design import (
42
+ HeatExchangerNetworkDesignView,
43
+ UtilityChoiceError,
44
+ )
42
45
  from ._problem.input.validation import (
43
46
  InputValidationWarning,
44
47
  build_validation_report,
@@ -75,12 +78,26 @@ _SESSIONS: dict[str, _Session] = {}
75
78
 
76
79
 
77
80
  class _DefaultUtilityWarning(UserWarning):
78
- """A default utility added to a problem that gave none of its kind."""
81
+ """A default utility added because no given utility of its kind can serve.
82
+
83
+ ``given`` names the problem's own utilities of that kind: none at all, or
84
+ ones that are too warm (cold) or too cool (hot), or capped, to take the
85
+ whole duty, in which case the default is a backup beside them.
86
+ """
79
87
 
80
- def __init__(self, name: str, kind: str) -> None:
81
- super().__init__(f"No {kind} utility given; added the default {name!r}.")
88
+ def __init__(self, name: str, kind: str, given: list[str]) -> None:
89
+ if given:
90
+ enough = "cold enough" if kind == "cold" else "hot enough"
91
+ message = (
92
+ f"None of the given {kind} utilities is {enough} and uncapped; "
93
+ f"added the default {name!r} as a backup."
94
+ )
95
+ else:
96
+ message = f"No {kind} utility given; added the default {name!r}."
97
+ super().__init__(message)
82
98
  self.name = name
83
99
  self.kind = kind
100
+ self.given = given
84
101
 
85
102
 
86
103
  def _load_problem(source: Mapping[str, Any]) -> PinchProblem:
@@ -106,9 +123,14 @@ def _load_problem(source: Mapping[str, Any]) -> PinchProblem:
106
123
  ("hot", problem.hot_utilities),
107
124
  ("cold", problem.cold_utilities),
108
125
  ):
126
+ given = [
127
+ utility.name for utility in utilities if not is_default_utility(utility)
128
+ ]
109
129
  for utility in utilities:
110
130
  if is_default_utility(utility):
111
- warnings.warn(_DefaultUtilityWarning(utility.name, kind), stacklevel=1)
131
+ warnings.warn(
132
+ _DefaultUtilityWarning(utility.name, kind, given), stacklevel=1
133
+ )
112
134
  return problem
113
135
 
114
136
 
@@ -276,6 +298,7 @@ def _warnings_json(caught: list[warnings.WarningMessage]) -> list[dict[str, Any]
276
298
  "details": {
277
299
  "name": warning.message.name,
278
300
  "kind": warning.message.kind,
301
+ "given": warning.message.given,
279
302
  },
280
303
  }
281
304
  )
@@ -413,6 +436,7 @@ _ANALYSIS_FAILURES = (
413
436
  HPRTargetingError,
414
437
  HprTargetCompatibilityError,
415
438
  OrcTargetingError,
439
+ UtilityChoiceError,
416
440
  )
417
441
 
418
442
 
@@ -429,6 +453,8 @@ def _error_json(error: Exception) -> dict[str, Any]:
429
453
  details = hpr_failure_summary(error)
430
454
  elif isinstance(error, HprTargetCompatibilityError):
431
455
  details = {"code": error.code}
456
+ elif isinstance(error, UtilityChoiceError):
457
+ details = {"side": error.side, "utilities": list(error.utilities)}
432
458
  return {"type": type(error).__name__, "message": str(error), "details": details}
433
459
 
434
460
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: OpenPinch
3
- Version: 0.7.3
3
+ Version: 0.7.4
4
4
  Summary: An advanced pinch analysis and total site integration toolkit
5
5
  Project-URL: Homepage, https://github.com/waikato-ahuora-smart-energy-systems/OpenPinch
6
6
  Project-URL: Issues, https://github.com/waikato-ahuora-smart-energy-systems/OpenPinch/issues
@@ -63,6 +63,7 @@ Description-Content-Type: text/markdown
63
63
  [![PyPI version](https://img.shields.io/pypi/v/openpinch.svg)](https://pypi.org/project/OpenPinch/)
64
64
  [![Python versions](https://img.shields.io/pypi/pyversions/openpinch.svg)](https://pypi.org/project/OpenPinch/)
65
65
  [![License: MIT](https://img.shields.io/github/license/waikato-ahuora-smart-energy-systems/OpenPinch.svg)](LICENSE)
66
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.23619779.svg)](https://doi.org/10.5281/zenodo.23619779)
66
67
 
67
68
  OpenPinch is an open-source Python toolkit for advanced Pinch Analysis and
68
69
  Total Site Integration. It supports direct and indirect heat integration
@@ -260,6 +261,10 @@ Timothy Gordon Walmsley, 2026. OpenPinch: An Open-Source Python Library for
260
261
  Advanced Pinch Analysis and Total Site Integration. Process Integration and
261
262
  Optimization for Sustainability. https://doi.org/10.1007/s41660-026-00729-6
262
263
 
264
+ Each release of the software is archived on Zenodo with its own DOI. The DOI
265
+ https://doi.org/10.5281/zenodo.23619779 always resolves to the latest release;
266
+ cite the DOI of the version you used, listed on its Zenodo page.
267
+
263
268
  ## Contributors
264
269
 
265
270
  Founder: Tim Walmsley, University of Waikato
@@ -5,6 +5,7 @@
5
5
  [![PyPI version](https://img.shields.io/pypi/v/openpinch.svg)](https://pypi.org/project/OpenPinch/)
6
6
  [![Python versions](https://img.shields.io/pypi/pyversions/openpinch.svg)](https://pypi.org/project/OpenPinch/)
7
7
  [![License: MIT](https://img.shields.io/github/license/waikato-ahuora-smart-energy-systems/OpenPinch.svg)](LICENSE)
8
+ [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.23619779.svg)](https://doi.org/10.5281/zenodo.23619779)
8
9
 
9
10
  OpenPinch is an open-source Python toolkit for advanced Pinch Analysis and
10
11
  Total Site Integration. It supports direct and indirect heat integration
@@ -202,6 +203,10 @@ Timothy Gordon Walmsley, 2026. OpenPinch: An Open-Source Python Library for
202
203
  Advanced Pinch Analysis and Total Site Integration. Process Integration and
203
204
  Optimization for Sustainability. https://doi.org/10.1007/s41660-026-00729-6
204
205
 
206
+ Each release of the software is archived on Zenodo with its own DOI. The DOI
207
+ https://doi.org/10.5281/zenodo.23619779 always resolves to the latest release;
208
+ cite the DOI of the version you used, listed on its Zenodo page.
209
+
205
210
  ## Contributors
206
211
 
207
212
  Founder: Tim Walmsley, University of Waikato
@@ -36,7 +36,7 @@ dependencies=[
36
36
  "pydantic>=2.12,<3",
37
37
  "scipy>=1.16.1,<2",
38
38
  ]
39
- version = "0.7.3"
39
+ version = "0.7.4"
40
40
  authors = [
41
41
  { name="Tim Walmsley", email="tim.walmsley@waikato.ac.nz" },
42
42
  ]
File without changes
File without changes