processforge 0.3.8__tar.gz → 0.3.9__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 processforge might be problematic. Click here for more details.

Files changed (121) hide show
  1. {processforge-0.3.8/src/processforge.egg-info → processforge-0.3.9}/PKG-INFO +4 -1
  2. {processforge-0.3.8 → processforge-0.3.9}/pyproject.toml +5 -1
  3. processforge-0.3.9/src/processforge/api/serve.py +94 -0
  4. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/cli/init.py +11 -0
  5. processforge-0.3.9/src/processforge/utils/__init__.py +0 -0
  6. {processforge-0.3.8 → processforge-0.3.9/src/processforge.egg-info}/PKG-INFO +4 -1
  7. {processforge-0.3.8 → processforge-0.3.9}/src/processforge.egg-info/SOURCES.txt +2 -0
  8. {processforge-0.3.8 → processforge-0.3.9}/src/processforge.egg-info/requires.txt +4 -0
  9. {processforge-0.3.8 → processforge-0.3.9}/LICENSE +0 -0
  10. {processforge-0.3.8 → processforge-0.3.9}/MANIFEST.in +0 -0
  11. {processforge-0.3.8 → processforge-0.3.9}/README.md +0 -0
  12. {processforge-0.3.8 → processforge-0.3.9}/flowsheets/closed-loop-chain.json +0 -0
  13. {processforge-0.3.8 → processforge-0.3.9}/flowsheets/custom/crimson/MUWS_HB.json +0 -0
  14. {processforge-0.3.8 → processforge-0.3.9}/flowsheets/custom/simple_hyrdaulic_scheme.json +0 -0
  15. {processforge-0.3.8 → processforge-0.3.9}/flowsheets/festim/hydrogen_transport_1d.json +0 -0
  16. {processforge-0.3.8 → processforge-0.3.9}/flowsheets/hydraulic-chain.json +0 -0
  17. {processforge-0.3.8 → processforge-0.3.9}/flowsheets/openmc/msre_eigenvalue.json +0 -0
  18. {processforge-0.3.8 → processforge-0.3.9}/setup.cfg +0 -0
  19. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/__init__.py +0 -0
  20. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/__main__.py +0 -0
  21. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/_schema.py +0 -0
  22. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/analysis/__init__.py +0 -0
  23. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/analysis/dof.py +0 -0
  24. {processforge-0.3.8/src/processforge/utils → processforge-0.3.9/src/processforge/api}/__init__.py +0 -0
  25. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/cli/__init__.py +0 -0
  26. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/cli/apply.py +0 -0
  27. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/cli/common.py +0 -0
  28. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/cli/diagram.py +0 -0
  29. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/cli/display.py +0 -0
  30. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/cli/export_fmu.py +0 -0
  31. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/cli/export_modelica.py +0 -0
  32. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/cli/plan.py +0 -0
  33. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/cli/run.py +0 -0
  34. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/cli/validate.py +0 -0
  35. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/compose.py +0 -0
  36. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/__init__.py +0 -0
  37. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/backends/__init__.py +0 -0
  38. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/backends/base.py +0 -0
  39. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/backends/casadi_backend.py +0 -0
  40. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/backends/pyomo_backend.py +0 -0
  41. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/backends/scipy_backend.py +0 -0
  42. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/flowsheet.py +0 -0
  43. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/jacobian.py +0 -0
  44. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/mixin.py +0 -0
  45. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/solver.py +0 -0
  46. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/stream_var.py +0 -0
  47. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/units/__init__.py +0 -0
  48. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/units/flash_eo.py +0 -0
  49. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/units/heater_eo.py +0 -0
  50. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/units/pipes_eo.py +0 -0
  51. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/units/pump_eo.py +0 -0
  52. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/units/strainer_eo.py +0 -0
  53. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/eo/units/valve_eo.py +0 -0
  54. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/flowsheet.py +0 -0
  55. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/fmu/__init__.py +0 -0
  56. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/fmu/_fmi_vars.py +0 -0
  57. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/fmu/builder.py +0 -0
  58. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/fmu/slave_template.py +0 -0
  59. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/lock.py +0 -0
  60. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/modelica/__init__.py +0 -0
  61. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/modelica/mo_writer.py +0 -0
  62. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/modelica/omc_runner.py +0 -0
  63. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/modelica/transpiler.py +0 -0
  64. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/modelica/unit_equations.py +0 -0
  65. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/pcl/__init__.py +0 -0
  66. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/pcl/compiler.py +0 -0
  67. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/pcl/namespace.py +0 -0
  68. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/provenance.py +0 -0
  69. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/__init__.py +0 -0
  70. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/base.py +0 -0
  71. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/base_jacobian_mixin.py +0 -0
  72. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/cantera_jacobian.py +0 -0
  73. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/cantera_provider.py +0 -0
  74. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/container_client.py +0 -0
  75. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/coolprop_provider.py +0 -0
  76. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/festim_provider.py +0 -0
  77. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/jacobian_contributor.py +0 -0
  78. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/manager.py +0 -0
  79. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/modelica_jacobian.py +0 -0
  80. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/modelica_provider.py +0 -0
  81. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/openmc_provider.py +0 -0
  82. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/reference_state_registry.py +0 -0
  83. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/providers/registry.py +0 -0
  84. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/result.py +0 -0
  85. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/result_schema.py +0 -0
  86. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/schemas/__init__.py +0 -0
  87. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/schemas/flowsheet_schema.json +0 -0
  88. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/schemas/openmc/openmc_model.py +0 -0
  89. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/simulate.py +0 -0
  90. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/solver.py +0 -0
  91. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/state.py +0 -0
  92. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/thermo.py +0 -0
  93. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/types.py +0 -0
  94. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/__init__.py +0 -0
  95. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/base.py +0 -0
  96. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/cstr.py +0 -0
  97. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/flash.py +0 -0
  98. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/heater.py +0 -0
  99. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/pfr.py +0 -0
  100. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/pipes.py +0 -0
  101. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/pump.py +0 -0
  102. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/registry.py +0 -0
  103. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/solver_unit.py +0 -0
  104. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/strainer.py +0 -0
  105. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/tank.py +0 -0
  106. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/units/valve.py +0 -0
  107. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/utils/flowsheet_diagram.py +0 -0
  108. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/utils/mermaid_diagram.py +0 -0
  109. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/utils/topology.py +0 -0
  110. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/utils/unit_consistency.py +0 -0
  111. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/utils/validate_flowsheet.py +0 -0
  112. {processforge-0.3.8 → processforge-0.3.9}/src/processforge/utils/validation.py +0 -0
  113. {processforge-0.3.8 → processforge-0.3.9}/src/processforge.egg-info/dependency_links.txt +0 -0
  114. {processforge-0.3.8 → processforge-0.3.9}/src/processforge.egg-info/entry_points.txt +0 -0
  115. {processforge-0.3.8 → processforge-0.3.9}/src/processforge.egg-info/top_level.txt +0 -0
  116. {processforge-0.3.8 → processforge-0.3.9}/tests/test_cli.py +0 -0
  117. {processforge-0.3.8 → processforge-0.3.9}/tests/test_festim_provider.py +0 -0
  118. {processforge-0.3.8 → processforge-0.3.9}/tests/test_init.py +0 -0
  119. {processforge-0.3.8 → processforge-0.3.9}/tests/test_providers.py +0 -0
  120. {processforge-0.3.8 → processforge-0.3.9}/tests/test_state.py +0 -0
  121. {processforge-0.3.8 → processforge-0.3.9}/tests/test_types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: processforge
3
- Version: 0.3.8
3
+ Version: 0.3.9
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
@@ -30,6 +30,9 @@ Requires-Dist: pandas>=2.2
30
30
  Requires-Dist: zarr>=3.0
31
31
  Requires-Dist: coolprop>=7.2.0
32
32
  Requires-Dist: typer>=0.12
33
+ Provides-Extra: api
34
+ Requires-Dist: fastapi>=0.110; extra == "api"
35
+ Requires-Dist: uvicorn>=0.29; extra == "api"
33
36
  Provides-Extra: eo
34
37
  Requires-Dist: pyomo>=6.7; extra == "eo"
35
38
  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.8"
7
+ version = "0.3.9"
8
8
  description = "A Python-based process simulation framework for chemical engineering applications."
9
9
  readme = "README.md"
10
10
  license = "BSD-3-Clause"
@@ -39,6 +39,10 @@ dependencies = [
39
39
  ]
40
40
 
41
41
  [project.optional-dependencies]
42
+ api = [
43
+ "fastapi>=0.110",
44
+ "uvicorn>=0.29",
45
+ ]
42
46
  eo = [
43
47
  "pyomo>=6.7",
44
48
  ]
@@ -0,0 +1,94 @@
1
+ """Processforge provider HTTP API.
2
+
3
+ Run as a module so deployment platforms that execute
4
+ ``python -m processforge.api.serve`` can boot the server directly::
5
+
6
+ python -m processforge.api.serve
7
+
8
+ The listen port is taken from the ``PORT`` environment variable
9
+ (default ``9000``), and the provider type from ``PROVIDER_TYPE``.
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ import os
15
+ import traceback
16
+
17
+ from fastapi import FastAPI, HTTPException
18
+
19
+ app = FastAPI(title="Processforge Provider")
20
+
21
+ PROVIDER_TYPE = os.environ.get("PROVIDER_TYPE", "")
22
+ DEFAULT_PORT = int(os.environ.get("PORT", "9000"))
23
+
24
+
25
+ @app.get("/health")
26
+ def health():
27
+ return {
28
+ "status": "ready",
29
+ "provider_type": PROVIDER_TYPE,
30
+ }
31
+
32
+
33
+ @app.post("/run")
34
+ def run(body: dict):
35
+ from processforge.types import UnitConfig, MaterialDef
36
+
37
+ try:
38
+ unit_cfg = UnitConfig.from_dict(body["unit_config"])
39
+ except Exception as exc:
40
+ raise HTTPException(status_code=400, detail=f"Invalid unit_config: {exc}") from exc
41
+
42
+ materials_raw = body.get("materials", {})
43
+ materials = {
44
+ name: MaterialDef.from_dict(mat)
45
+ for name, mat in materials_raw.items()
46
+ }
47
+
48
+ from processforge.providers.registry import get_provider_class
49
+
50
+ try:
51
+ provider_cls = get_provider_class(PROVIDER_TYPE)
52
+ except ValueError as exc:
53
+ raise HTTPException(status_code=400, detail=str(exc)) from exc
54
+
55
+ provider = provider_cls()
56
+
57
+ # Build the provider config for initialize(). Prefer the real config the
58
+ # CLI serialised into the request body (carries cross_sections, output_dir,
59
+ # url, …); fall back to a minimal container-default config otherwise.
60
+ provider_config_raw = body.get("provider_config")
61
+ if provider_config_raw:
62
+ from processforge.types import provider_config_from_dict
63
+
64
+ provider_config = provider_config_from_dict(provider_config_raw)
65
+ else:
66
+ provider_config = type("Cfg", (), {
67
+ "url": None,
68
+ "output_dir": os.environ.get("PROCESSFORGE_OUTPUT_DIR", "/data"),
69
+ "cross_sections": None,
70
+ "type": PROVIDER_TYPE,
71
+ })()
72
+
73
+ # Build a minimal flowsheet config holding materials.
74
+ flowsheet_config = type("FS", (), {"materials": materials})()
75
+
76
+ try:
77
+ provider.initialize(provider_config, flowsheet_config)
78
+ result = provider.run_simulation(unit_cfg, body.get("inlet", {}))
79
+ return result.as_dict() | {"metadata": result.metadata}
80
+ except HTTPException:
81
+ raise
82
+ except Exception as exc:
83
+ raise HTTPException(
84
+ status_code=500,
85
+ detail=f"Simulation failed: {exc}\n{traceback.format_exc()}",
86
+ ) from exc
87
+ finally:
88
+ provider.teardown()
89
+
90
+
91
+ if __name__ == "__main__":
92
+ import uvicorn
93
+
94
+ uvicorn.run(app, host="0.0.0.0", port=DEFAULT_PORT)
@@ -224,6 +224,17 @@ def init(
224
224
  )
225
225
  except subprocess.TimeoutExpired:
226
226
  logger.warning("docker compose pull timed out after 600s.")
227
+
228
+ logger.info(
229
+ "To start the containerized provider(s), run:\n"
230
+ f" docker compose -f {compose_path} up -d"
231
+ )
232
+ if any(info["type"] == "openmc" for info in local_docker_providers.values()):
233
+ logger.info(
234
+ "Running OpenMC — set OPENMC_DATA_ROOT to mount your OpenMC "
235
+ "data/workspace into the container (defaults to 'outputs'):\n"
236
+ f" OPENMC_DATA_ROOT=/path/to/data docker compose -f {compose_path} up -d"
237
+ )
227
238
  elif remote_docker_providers:
228
239
  logger.info(
229
240
  "All containerized providers use remote URLs — skipping Docker setup."
File without changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: processforge
3
- Version: 0.3.8
3
+ Version: 0.3.9
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
@@ -30,6 +30,9 @@ Requires-Dist: pandas>=2.2
30
30
  Requires-Dist: zarr>=3.0
31
31
  Requires-Dist: coolprop>=7.2.0
32
32
  Requires-Dist: typer>=0.12
33
+ Provides-Extra: api
34
+ Requires-Dist: fastapi>=0.110; extra == "api"
35
+ Requires-Dist: uvicorn>=0.29; extra == "api"
33
36
  Provides-Extra: eo
34
37
  Requires-Dist: pyomo>=6.7; extra == "eo"
35
38
  Provides-Extra: eo-casadi
@@ -30,6 +30,8 @@ src/processforge.egg-info/requires.txt
30
30
  src/processforge.egg-info/top_level.txt
31
31
  src/processforge/analysis/__init__.py
32
32
  src/processforge/analysis/dof.py
33
+ src/processforge/api/__init__.py
34
+ src/processforge/api/serve.py
33
35
  src/processforge/cli/__init__.py
34
36
  src/processforge/cli/apply.py
35
37
  src/processforge/cli/common.py
@@ -10,6 +10,10 @@ zarr>=3.0
10
10
  coolprop>=7.2.0
11
11
  typer>=0.12
12
12
 
13
+ [api]
14
+ fastapi>=0.110
15
+ uvicorn>=0.29
16
+
13
17
  [cantera]
14
18
  cantera>=3.0
15
19
 
File without changes
File without changes
File without changes
File without changes