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.
- {processforge-0.3.9/src/processforge.egg-info → processforge-0.3.11}/PKG-INFO +2 -1
- {processforge-0.3.9 → processforge-0.3.11}/pyproject.toml +2 -1
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/api/serve.py +22 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/run.py +4 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/container_client.py +2 -2
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/openmc_provider.py +291 -164
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/schemas/openmc/openmc_model.py +33 -2
- processforge-0.3.11/src/processforge/utils/s3_upload.py +69 -0
- {processforge-0.3.9 → processforge-0.3.11/src/processforge.egg-info}/PKG-INFO +2 -1
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge.egg-info/SOURCES.txt +3 -2
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge.egg-info/requires.txt +1 -0
- processforge-0.3.11/tests/test_openmc_provider.py +524 -0
- processforge-0.3.11/tests/test_s3_upload.py +81 -0
- processforge-0.3.9/flowsheets/custom/crimson/MUWS_HB.json +0 -216
- processforge-0.3.9/flowsheets/custom/simple_hyrdaulic_scheme.json +0 -202
- {processforge-0.3.9 → processforge-0.3.11}/LICENSE +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/MANIFEST.in +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/README.md +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/flowsheets/closed-loop-chain.json +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/flowsheets/festim/hydrogen_transport_1d.json +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/flowsheets/hydraulic-chain.json +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/flowsheets/openmc/msre_eigenvalue.json +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/setup.cfg +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/__main__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/_schema.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/analysis/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/analysis/dof.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/api/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/apply.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/common.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/diagram.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/display.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/export_fmu.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/export_modelica.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/init.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/plan.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/cli/validate.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/compose.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/backends/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/backends/base.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/backends/casadi_backend.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/backends/pyomo_backend.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/backends/scipy_backend.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/flowsheet.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/jacobian.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/mixin.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/solver.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/stream_var.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/flash_eo.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/heater_eo.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/pipes_eo.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/pump_eo.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/strainer_eo.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/eo/units/valve_eo.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/flowsheet.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/fmu/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/fmu/_fmi_vars.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/fmu/builder.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/fmu/slave_template.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/lock.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/modelica/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/modelica/mo_writer.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/modelica/omc_runner.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/modelica/transpiler.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/modelica/unit_equations.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/pcl/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/pcl/compiler.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/pcl/namespace.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/provenance.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/base.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/base_jacobian_mixin.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/cantera_jacobian.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/cantera_provider.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/coolprop_provider.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/festim_provider.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/jacobian_contributor.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/manager.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/modelica_jacobian.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/modelica_provider.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/reference_state_registry.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/providers/registry.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/result.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/result_schema.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/schemas/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/schemas/flowsheet_schema.json +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/simulate.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/solver.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/state.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/thermo.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/types.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/base.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/cstr.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/flash.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/heater.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/pfr.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/pipes.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/pump.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/registry.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/solver_unit.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/strainer.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/tank.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/units/valve.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/__init__.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/flowsheet_diagram.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/mermaid_diagram.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/topology.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/unit_consistency.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/validate_flowsheet.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge/utils/validation.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge.egg-info/dependency_links.txt +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge.egg-info/entry_points.txt +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/src/processforge.egg-info/top_level.txt +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/tests/test_cli.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/tests/test_festim_provider.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/tests/test_init.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/tests/test_providers.py +0 -0
- {processforge-0.3.9 → processforge-0.3.11}/tests/test_state.py +0 -0
- {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.
|
|
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.
|
|
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 ``
|
|
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 ``
|
|
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"}``.
|