processforge 0.3.9__tar.gz → 0.3.11__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 (124) hide show
  1. {processforge-0.3.9/src/processforge.egg-info → processforge-0.3.11}/PKG-INFO +2 -1
  2. {processforge-0.3.9 → processforge-0.3.11}/pyproject.toml +2 -1
  3. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/api/serve.py +22 -0
  4. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/run.py +4 -0
  5. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/container_client.py +2 -2
  6. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/openmc_provider.py +291 -164
  7. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/schemas/openmc/openmc_model.py +33 -2
  8. processforge-0.3.11/src/processforge/utils/s3_upload.py +69 -0
  9. {processforge-0.3.9 → processforge-0.3.11/src/processforge.egg-info}/PKG-INFO +2 -1
  10. {processforge-0.3.9 → processforge-0.3.11}/src/processforge.egg-info/SOURCES.txt +3 -2
  11. {processforge-0.3.9 → processforge-0.3.11}/src/processforge.egg-info/requires.txt +1 -0
  12. processforge-0.3.11/tests/test_openmc_provider.py +524 -0
  13. processforge-0.3.11/tests/test_s3_upload.py +81 -0
  14. processforge-0.3.9/flowsheets/custom/crimson/MUWS_HB.json +0 -216
  15. processforge-0.3.9/flowsheets/custom/simple_hyrdaulic_scheme.json +0 -202
  16. {processforge-0.3.9 → processforge-0.3.11}/LICENSE +0 -0
  17. {processforge-0.3.9 → processforge-0.3.11}/MANIFEST.in +0 -0
  18. {processforge-0.3.9 → processforge-0.3.11}/README.md +0 -0
  19. {processforge-0.3.9 → processforge-0.3.11}/flowsheets/closed-loop-chain.json +0 -0
  20. {processforge-0.3.9 → processforge-0.3.11}/flowsheets/festim/hydrogen_transport_1d.json +0 -0
  21. {processforge-0.3.9 → processforge-0.3.11}/flowsheets/hydraulic-chain.json +0 -0
  22. {processforge-0.3.9 → processforge-0.3.11}/flowsheets/openmc/msre_eigenvalue.json +0 -0
  23. {processforge-0.3.9 → processforge-0.3.11}/setup.cfg +0 -0
  24. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/__init__.py +0 -0
  25. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/__main__.py +0 -0
  26. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/_schema.py +0 -0
  27. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/analysis/__init__.py +0 -0
  28. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/analysis/dof.py +0 -0
  29. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/api/__init__.py +0 -0
  30. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/__init__.py +0 -0
  31. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/apply.py +0 -0
  32. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/common.py +0 -0
  33. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/diagram.py +0 -0
  34. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/display.py +0 -0
  35. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/export_fmu.py +0 -0
  36. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/export_modelica.py +0 -0
  37. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/init.py +0 -0
  38. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/plan.py +0 -0
  39. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/validate.py +0 -0
  40. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/compose.py +0 -0
  41. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/__init__.py +0 -0
  42. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/backends/__init__.py +0 -0
  43. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/backends/base.py +0 -0
  44. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/backends/casadi_backend.py +0 -0
  45. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/backends/pyomo_backend.py +0 -0
  46. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/backends/scipy_backend.py +0 -0
  47. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/flowsheet.py +0 -0
  48. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/jacobian.py +0 -0
  49. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/mixin.py +0 -0
  50. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/solver.py +0 -0
  51. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/stream_var.py +0 -0
  52. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/__init__.py +0 -0
  53. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/flash_eo.py +0 -0
  54. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/heater_eo.py +0 -0
  55. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/pipes_eo.py +0 -0
  56. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/pump_eo.py +0 -0
  57. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/strainer_eo.py +0 -0
  58. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/valve_eo.py +0 -0
  59. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/flowsheet.py +0 -0
  60. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/fmu/__init__.py +0 -0
  61. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/fmu/_fmi_vars.py +0 -0
  62. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/fmu/builder.py +0 -0
  63. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/fmu/slave_template.py +0 -0
  64. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/lock.py +0 -0
  65. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/modelica/__init__.py +0 -0
  66. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/modelica/mo_writer.py +0 -0
  67. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/modelica/omc_runner.py +0 -0
  68. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/modelica/transpiler.py +0 -0
  69. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/modelica/unit_equations.py +0 -0
  70. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/pcl/__init__.py +0 -0
  71. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/pcl/compiler.py +0 -0
  72. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/pcl/namespace.py +0 -0
  73. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/provenance.py +0 -0
  74. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/__init__.py +0 -0
  75. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/base.py +0 -0
  76. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/base_jacobian_mixin.py +0 -0
  77. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/cantera_jacobian.py +0 -0
  78. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/cantera_provider.py +0 -0
  79. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/coolprop_provider.py +0 -0
  80. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/festim_provider.py +0 -0
  81. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/jacobian_contributor.py +0 -0
  82. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/manager.py +0 -0
  83. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/modelica_jacobian.py +0 -0
  84. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/modelica_provider.py +0 -0
  85. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/reference_state_registry.py +0 -0
  86. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/registry.py +0 -0
  87. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/result.py +0 -0
  88. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/result_schema.py +0 -0
  89. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/schemas/__init__.py +0 -0
  90. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/schemas/flowsheet_schema.json +0 -0
  91. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/simulate.py +0 -0
  92. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/solver.py +0 -0
  93. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/state.py +0 -0
  94. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/thermo.py +0 -0
  95. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/types.py +0 -0
  96. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/__init__.py +0 -0
  97. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/base.py +0 -0
  98. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/cstr.py +0 -0
  99. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/flash.py +0 -0
  100. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/heater.py +0 -0
  101. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/pfr.py +0 -0
  102. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/pipes.py +0 -0
  103. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/pump.py +0 -0
  104. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/registry.py +0 -0
  105. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/solver_unit.py +0 -0
  106. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/strainer.py +0 -0
  107. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/tank.py +0 -0
  108. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/valve.py +0 -0
  109. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/__init__.py +0 -0
  110. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/flowsheet_diagram.py +0 -0
  111. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/mermaid_diagram.py +0 -0
  112. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/topology.py +0 -0
  113. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/unit_consistency.py +0 -0
  114. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/validate_flowsheet.py +0 -0
  115. {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/validation.py +0 -0
  116. {processforge-0.3.9 → processforge-0.3.11}/src/processforge.egg-info/dependency_links.txt +0 -0
  117. {processforge-0.3.9 → processforge-0.3.11}/src/processforge.egg-info/entry_points.txt +0 -0
  118. {processforge-0.3.9 → processforge-0.3.11}/src/processforge.egg-info/top_level.txt +0 -0
  119. {processforge-0.3.9 → processforge-0.3.11}/tests/test_cli.py +0 -0
  120. {processforge-0.3.9 → processforge-0.3.11}/tests/test_festim_provider.py +0 -0
  121. {processforge-0.3.9 → processforge-0.3.11}/tests/test_init.py +0 -0
  122. {processforge-0.3.9 → processforge-0.3.11}/tests/test_providers.py +0 -0
  123. {processforge-0.3.9 → processforge-0.3.11}/tests/test_state.py +0 -0
  124. {processforge-0.3.9 → processforge-0.3.11}/tests/test_types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: processforge
3
- Version: 0.3.9
3
+ Version: 0.3.11
4
4
  Summary: A Python-based process simulation framework for chemical engineering applications.
5
5
  Author-email: Processforge Team <team@processforge.dev>
6
6
  License-Expression: BSD-3-Clause
@@ -33,6 +33,7 @@ Requires-Dist: typer>=0.12
33
33
  Provides-Extra: api
34
34
  Requires-Dist: fastapi>=0.110; extra == "api"
35
35
  Requires-Dist: uvicorn>=0.29; extra == "api"
36
+ Requires-Dist: s3fs>=2024.0; extra == "api"
36
37
  Provides-Extra: eo
37
38
  Requires-Dist: pyomo>=6.7; extra == "eo"
38
39
  Provides-Extra: eo-casadi
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "processforge"
7
- version = "0.3.9"
7
+ version = "0.3.11"
8
8
  description = "A Python-based process simulation framework for chemical engineering applications."
9
9
  readme = "README.md"
10
10
  license = "BSD-3-Clause"
@@ -42,6 +42,7 @@ dependencies = [
42
42
  api = [
43
43
  "fastapi>=0.110",
44
44
  "uvicorn>=0.29",
45
+ "s3fs>=2024.0",
45
46
  ]
46
47
  eo = [
47
48
  "pyomo>=6.7",
@@ -15,6 +15,7 @@ import os
15
15
  import traceback
16
16
 
17
17
  from fastapi import FastAPI, HTTPException
18
+ from loguru import logger
18
19
 
19
20
  app = FastAPI(title="Processforge Provider")
20
21
 
@@ -76,6 +77,7 @@ def run(body: dict):
76
77
  try:
77
78
  provider.initialize(provider_config, flowsheet_config)
78
79
  result = provider.run_simulation(unit_cfg, body.get("inlet", {}))
80
+ _maybe_upload_run_outputs(result)
79
81
  return result.as_dict() | {"metadata": result.metadata}
80
82
  except HTTPException:
81
83
  raise
@@ -88,6 +90,26 @@ def run(body: dict):
88
90
  provider.teardown()
89
91
 
90
92
 
93
+ def _maybe_upload_run_outputs(result) -> None:
94
+ """Upload the provider's run_dir to S3 when configured.
95
+
96
+ No-op unless ``S3_BUCKET`` is set in the container environment and the
97
+ provider recorded a ``run_dir`` in its result metadata. Upload failures are
98
+ logged and never fail the run.
99
+ """
100
+ run_dir = result.metadata.get("run_dir")
101
+ if not run_dir:
102
+ return
103
+ try:
104
+ from processforge.utils.s3_upload import upload_directory_to_s3
105
+
106
+ s3_uri = upload_directory_to_s3(run_dir)
107
+ if s3_uri:
108
+ result.metadata["s3_uri"] = s3_uri
109
+ except Exception as exc: # noqa: BLE001
110
+ logger.warning(f"S3 upload of {run_dir} failed: {exc}")
111
+
112
+
91
113
  if __name__ == "__main__":
92
114
  import uvicorn
93
115
 
@@ -100,6 +100,10 @@ def run(
100
100
  logger.info(f" Backend : {display_backend(config, getattr(fs, 'backend', 'dynamic'))}")
101
101
  logger.info(f"Results saved to {zarr_path}")
102
102
 
103
+ for name, res in results.items():
104
+ if isinstance(res, dict) and (s3_uri := res.get("metadata", {}).get("s3_uri")):
105
+ logger.info(f" Run outputs (S3): {s3_uri}")
106
+
103
107
  if export_images:
104
108
  try:
105
109
  plot_results(results, fname=f"{base_name}_results.png")
@@ -1,13 +1,13 @@
1
1
  """CLI-side HTTP client for containerized providers (OpenMC, FESTIM, …).
2
2
 
3
3
  A provider that runs in a Docker container does its real work inside the
4
- container (in ``docker/provider_server.py``). The CLI side must NOT import the
4
+ container (in ``processforge.api.serve``). The CLI side must NOT import the
5
5
  backend library (OpenMC, FESTIM, …) locally — instead it speaks HTTP to the
6
6
  container's ``provider_server.py`` instance. :class:`ContainerProviderClient`
7
7
  implements the :class:`~processforge.providers.base.AbstractProvider` contract
8
8
  as a thin HTTP wrapper around that server.
9
9
 
10
- Request/response contract (matches ``docker/provider_server.py``)
10
+ Request/response contract (matches ``processforge.api.serve``)
11
11
  ----------------------------------------------------------------
12
12
  * ``POST /run`` with a JSON body
13
13
  ``{"unit_config", "materials", "inlet", "output_dir", "provider_config"}``.