From c556e5f0468348d64ee9eca55795a9550c1654a0 Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 09:29:34 -0400 Subject: [PATCH 01/17] moved nodes to their own dir --- src/nodeConfig.js | 28 ++++++++++++++-------------- src/{ => nodes}/AdderNode.jsx | 0 src/{ => nodes}/AmplifierNode.jsx | 0 src/{ => nodes}/BubblerNode.jsx | 0 src/{ => nodes}/ConstantNode.jsx | 0 src/{ => nodes}/ContextMenu.jsx | 0 src/{ => nodes}/CustomEdge.jsx | 0 src/{ => nodes}/CustomHandle.jsx | 0 src/{ => nodes}/DefaultNode.jsx | 0 src/{ => nodes}/DelayNode.jsx | 0 src/{ => nodes}/FunctionNode.jsx | 0 src/{ => nodes}/IntegratorNode.jsx | 0 src/{ => nodes}/MultiplierNode.jsx | 0 src/{ => nodes}/ProcessNode.jsx | 0 src/{ => nodes}/ScopeNode.jsx | 0 src/{ => nodes}/Splitters.jsx | 0 src/{ => nodes}/StepSourceNode.jsx | 0 src/{ => nodes}/WallNode.jsx | 0 18 files changed, 14 insertions(+), 14 deletions(-) rename src/{ => nodes}/AdderNode.jsx (100%) rename src/{ => nodes}/AmplifierNode.jsx (100%) rename src/{ => nodes}/BubblerNode.jsx (100%) rename src/{ => nodes}/ConstantNode.jsx (100%) rename src/{ => nodes}/ContextMenu.jsx (100%) rename src/{ => nodes}/CustomEdge.jsx (100%) rename src/{ => nodes}/CustomHandle.jsx (100%) rename src/{ => nodes}/DefaultNode.jsx (100%) rename src/{ => nodes}/DelayNode.jsx (100%) rename src/{ => nodes}/FunctionNode.jsx (100%) rename src/{ => nodes}/IntegratorNode.jsx (100%) rename src/{ => nodes}/MultiplierNode.jsx (100%) rename src/{ => nodes}/ProcessNode.jsx (100%) rename src/{ => nodes}/ScopeNode.jsx (100%) rename src/{ => nodes}/Splitters.jsx (100%) rename src/{ => nodes}/StepSourceNode.jsx (100%) rename src/{ => nodes}/WallNode.jsx (100%) diff --git a/src/nodeConfig.js b/src/nodeConfig.js index 9089cc76..701f8dbb 100644 --- a/src/nodeConfig.js +++ b/src/nodeConfig.js @@ -1,18 +1,18 @@ // Node type definitions and categorization -import { ProcessNode, ProcessNodeHorizontal } from './ProcessNode'; -import DelayNode from './DelayNode'; -import SourceNode from './ConstantNode'; -import { AmplifierNode, AmplifierNodeReverse } from './AmplifierNode'; -import IntegratorNode from './IntegratorNode'; -import AdderNode from './AdderNode'; -import ScopeNode from './ScopeNode'; -import StepSourceNode from './StepSourceNode'; -import {createFunctionNode} from './FunctionNode'; -import DefaultNode from './DefaultNode'; -import MultiplierNode from './MultiplierNode'; -import { Splitter2Node, Splitter3Node } from './Splitters'; -import BubblerNode from './BubblerNode'; -import WallNode from './WallNode'; +import { ProcessNode, ProcessNodeHorizontal } from './nodes/ProcessNode'; +import DelayNode from './nodes/DelayNode'; +import SourceNode from './nodes/ConstantNode'; +import { AmplifierNode, AmplifierNodeReverse } from './nodes/AmplifierNode'; +import IntegratorNode from './nodes/IntegratorNode'; +import AdderNode from './nodes/AdderNode'; +import ScopeNode from './nodes/ScopeNode'; +import StepSourceNode from './nodes/StepSourceNode'; +import {createFunctionNode} from './nodes/FunctionNode'; +import DefaultNode from './nodes/DefaultNode'; +import MultiplierNode from './nodes/MultiplierNode'; +import { Splitter2Node, Splitter3Node } from './nodes/Splitters'; +import BubblerNode from './nodes/BubblerNode'; +import WallNode from './nodes/WallNode'; // Node types mapping export const nodeTypes = { diff --git a/src/AdderNode.jsx b/src/nodes/AdderNode.jsx similarity index 100% rename from src/AdderNode.jsx rename to src/nodes/AdderNode.jsx diff --git a/src/AmplifierNode.jsx b/src/nodes/AmplifierNode.jsx similarity index 100% rename from src/AmplifierNode.jsx rename to src/nodes/AmplifierNode.jsx diff --git a/src/BubblerNode.jsx b/src/nodes/BubblerNode.jsx similarity index 100% rename from src/BubblerNode.jsx rename to src/nodes/BubblerNode.jsx diff --git a/src/ConstantNode.jsx b/src/nodes/ConstantNode.jsx similarity index 100% rename from src/ConstantNode.jsx rename to src/nodes/ConstantNode.jsx diff --git a/src/ContextMenu.jsx b/src/nodes/ContextMenu.jsx similarity index 100% rename from src/ContextMenu.jsx rename to src/nodes/ContextMenu.jsx diff --git a/src/CustomEdge.jsx b/src/nodes/CustomEdge.jsx similarity index 100% rename from src/CustomEdge.jsx rename to src/nodes/CustomEdge.jsx diff --git a/src/CustomHandle.jsx b/src/nodes/CustomHandle.jsx similarity index 100% rename from src/CustomHandle.jsx rename to src/nodes/CustomHandle.jsx diff --git a/src/DefaultNode.jsx b/src/nodes/DefaultNode.jsx similarity index 100% rename from src/DefaultNode.jsx rename to src/nodes/DefaultNode.jsx diff --git a/src/DelayNode.jsx b/src/nodes/DelayNode.jsx similarity index 100% rename from src/DelayNode.jsx rename to src/nodes/DelayNode.jsx diff --git a/src/FunctionNode.jsx b/src/nodes/FunctionNode.jsx similarity index 100% rename from src/FunctionNode.jsx rename to src/nodes/FunctionNode.jsx diff --git a/src/IntegratorNode.jsx b/src/nodes/IntegratorNode.jsx similarity index 100% rename from src/IntegratorNode.jsx rename to src/nodes/IntegratorNode.jsx diff --git a/src/MultiplierNode.jsx b/src/nodes/MultiplierNode.jsx similarity index 100% rename from src/MultiplierNode.jsx rename to src/nodes/MultiplierNode.jsx diff --git a/src/ProcessNode.jsx b/src/nodes/ProcessNode.jsx similarity index 100% rename from src/ProcessNode.jsx rename to src/nodes/ProcessNode.jsx diff --git a/src/ScopeNode.jsx b/src/nodes/ScopeNode.jsx similarity index 100% rename from src/ScopeNode.jsx rename to src/nodes/ScopeNode.jsx diff --git a/src/Splitters.jsx b/src/nodes/Splitters.jsx similarity index 100% rename from src/Splitters.jsx rename to src/nodes/Splitters.jsx diff --git a/src/StepSourceNode.jsx b/src/nodes/StepSourceNode.jsx similarity index 100% rename from src/StepSourceNode.jsx rename to src/nodes/StepSourceNode.jsx diff --git a/src/WallNode.jsx b/src/nodes/WallNode.jsx similarity index 100% rename from src/WallNode.jsx rename to src/nodes/WallNode.jsx From b7444efa4b36b13bc3a89f39536859767f685ed1 Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 09:34:37 -0400 Subject: [PATCH 02/17] moved back context and customedge --- src/{nodes => }/ContextMenu.jsx | 0 src/{nodes => }/CustomEdge.jsx | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/{nodes => }/ContextMenu.jsx (100%) rename src/{nodes => }/CustomEdge.jsx (100%) diff --git a/src/nodes/ContextMenu.jsx b/src/ContextMenu.jsx similarity index 100% rename from src/nodes/ContextMenu.jsx rename to src/ContextMenu.jsx diff --git a/src/nodes/CustomEdge.jsx b/src/CustomEdge.jsx similarity index 100% rename from src/nodes/CustomEdge.jsx rename to src/CustomEdge.jsx From c5d9cbedcd8239f7d36975664c5b9412e6fe25f8 Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 09:34:48 -0400 Subject: [PATCH 03/17] moved css to styles --- src/App.jsx | 2 +- src/GlobalVariablesTab.jsx | 2 +- src/main.jsx | 2 +- src/{ => styles}/App.css | 0 src/{ => styles}/PythonCodeEditor.css | 0 src/{ => styles}/index.css | 0 6 files changed, 3 insertions(+), 3 deletions(-) rename src/{ => styles}/App.css (100%) rename src/{ => styles}/PythonCodeEditor.css (100%) rename src/{ => styles}/index.css (100%) diff --git a/src/App.jsx b/src/App.jsx index bc6aa199..3d09b5bc 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -11,7 +11,7 @@ import { useEdgesState, } from '@xyflow/react'; import '@xyflow/react/dist/style.css'; -import './App.css'; +import './styles/App.css'; import Plot from 'react-plotly.js'; import { getApiEndpoint } from './config.js'; import Sidebar from './Sidebar'; diff --git a/src/GlobalVariablesTab.jsx b/src/GlobalVariablesTab.jsx index c01348da..74b6a623 100644 --- a/src/GlobalVariablesTab.jsx +++ b/src/GlobalVariablesTab.jsx @@ -2,7 +2,7 @@ import { isValidPythonIdentifier } from './utils.js'; import PythonCodeEditor from './PythonCodeEditor'; -import './PythonCodeEditor.css'; +import './styles/PythonCodeEditor.css'; export const IdeWithAutocomplete = ({ pythonCode, setPythonCode }) => { const handleCodeExecution = (result) => { diff --git a/src/main.jsx b/src/main.jsx index 257599a7..19a23541 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -1,6 +1,6 @@ import { StrictMode } from 'react' import { createRoot } from 'react-dom/client' -import './index.css' +import './styles/index.css' import { App } from './App.jsx' createRoot(document.getElementById('root')).render( diff --git a/src/App.css b/src/styles/App.css similarity index 100% rename from src/App.css rename to src/styles/App.css diff --git a/src/PythonCodeEditor.css b/src/styles/PythonCodeEditor.css similarity index 100% rename from src/PythonCodeEditor.css rename to src/styles/PythonCodeEditor.css diff --git a/src/index.css b/src/styles/index.css similarity index 100% rename from src/index.css rename to src/styles/index.css From e5d16df7f8a3430add4a0b2163dd80de1dcfd1b7 Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 10:00:25 -0400 Subject: [PATCH 04/17] test making a package --- MANIFEST.in | 9 ++++ fuel_cycle_sim/__init__.py | 20 +++++++ pyproject.toml | 52 +++++++++++++++++++ requirements-dev.txt | 14 +++++ requirements.txt | 20 ++----- src/__init__.py | 4 -- src/python/__init__.py | 20 +++++++ src/{ => python}/convert_to_python.py | 0 src/{ => python}/custom_pathsim_blocks.py | 0 src/{ => python}/pathsim_utils.py | 0 src/{ => python}/templates/__init__.py | 0 src/{ => python}/templates/block_macros.py | 0 .../templates/template_with_macros.py | 2 +- test/test_backend.py | 10 +++- test/test_convert_python.py | 2 +- test/test_custom_blocks.py | 2 +- test/test_events.py | 2 +- test/test_examples.py | 2 +- 18 files changed, 133 insertions(+), 26 deletions(-) create mode 100644 MANIFEST.in create mode 100644 fuel_cycle_sim/__init__.py create mode 100644 pyproject.toml create mode 100644 requirements-dev.txt delete mode 100644 src/__init__.py create mode 100644 src/python/__init__.py rename src/{ => python}/convert_to_python.py (100%) rename src/{ => python}/custom_pathsim_blocks.py (100%) rename src/{ => python}/pathsim_utils.py (100%) rename src/{ => python}/templates/__init__.py (100%) rename src/{ => python}/templates/block_macros.py (100%) rename src/{ => python}/templates/template_with_macros.py (98%) diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 00000000..774894bf --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,9 @@ +include README.md +include LICENSE +include PACKAGE_README.md +include pyproject.toml +recursive-include src/python *.py +recursive-include src/python/templates * +global-exclude *.pyc +global-exclude __pycache__ +global-exclude .DS_Store diff --git a/fuel_cycle_sim/__init__.py b/fuel_cycle_sim/__init__.py new file mode 100644 index 00000000..302822e7 --- /dev/null +++ b/fuel_cycle_sim/__init__.py @@ -0,0 +1,20 @@ +""" +Fuel Cycle Simulation Package + +A Python package for fuel cycle simulation with a web-based interface. +""" + +__version__ = "0.1.0" +__author__ = "Your Name" +__email__ = "your.email@example.com" + +# Import main functions for easy access +from .pathsim_utils import make_pathsim_model, map_str_to_object +from .convert_to_python import convert_graph_to_python + +# Define what gets exported when someone does "from fuel_cycle_sim import *" +__all__ = [ + "make_pathsim_model", + "map_str_to_object", + "convert_graph_to_python", +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..c7cb885d --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,52 @@ +[build-system] +requires = ["setuptools>=61.0", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "fuel-cycle-sim" +version = "0.1.0" +description = "A Python package for fuel cycle simulation with pathsim integration" +readme = "README.md" +license = {file = "LICENSE"} +authors = [ + {name = "Your Name", email = "your.email@example.com"} +] +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", +] +requires-python = ">=3.8" +dependencies = [ + "pathsim>=0.7.0", + "matplotlib>=3.7.0", + "numpy>=1.24.0", + "plotly>=6.0", +] + +[project.optional-dependencies] +dev = [ + "pytest", + "sphinx>=4.0.0", + "docutils>=0.17.0", +] + + +[project.urls] +Homepage = "https://github.com/yourusername/fuel-cycle-sim" +Documentation = "https://fuel-cycle-sim.readthedocs.io/" +Repository = "https://github.com/yourusername/fuel-cycle-sim.git" +Issues = "https://github.com/yourusername/fuel-cycle-sim/issues" + +[tool.setuptools] +packages = ["fuel_cycle_sim"] +package-dir = {"fuel_cycle_sim" = "src/python"} + +[tool.setuptools.package-data] +fuel_cycle_sim = ["templates/*"] diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 00000000..fc0eb6de --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,14 @@ +# Core package dependencies +pathsim>=0.7.0 +matplotlib>=3.7.0 +numpy>=1.24.0 +plotly>=6.0 + +# Web application dependencies (not needed for core package) +Flask>=3.1.1 +flask-cors>=6.0.1 + +# Development dependencies +pytest +sphinx>=4.0.0 +docutils>=0.17.0 diff --git a/requirements.txt b/requirements.txt index 7bf93ba3..98d56a24 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,15 +1,5 @@ -blinker==1.9.0 -click==8.2.1 -Flask==3.1.1 -flask-cors==6.0.1 -itsdangerous==2.2.0 -Jinja2==3.1.6 -MarkupSafe==3.0.2 -Werkzeug==3.1.3 -pathsim==0.7.0 -matplotlib==3.7.0 -numpy==1.24.0 -plotly~=6.0 -pytest -sphinx>=4.0.0 -docutils>=0.17.0 \ No newline at end of file +# Core package dependencies only +pathsim>=0.7.0 +matplotlib>=3.7.0 +numpy>=1.24.0 +plotly>=6.0 \ No newline at end of file diff --git a/src/__init__.py b/src/__init__.py deleted file mode 100644 index fa17a663..00000000 --- a/src/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from . import custom_pathsim_blocks -from . import pathsim_utils -from . import backend -from . import convert_to_python diff --git a/src/python/__init__.py b/src/python/__init__.py new file mode 100644 index 00000000..7b8a78e4 --- /dev/null +++ b/src/python/__init__.py @@ -0,0 +1,20 @@ +""" +Fuel Cycle Simulation Package + +A Python package for fuel cycle simulation with pathsim integration. +""" + +__version__ = "0.1.0" +__author__ = "Your Name" +__email__ = "your.email@example.com" + +# Import main functions for easy access +from .pathsim_utils import make_pathsim_model, map_str_to_object +from .convert_to_python import convert_graph_to_python + +# Define what gets exported when someone does "from python import *" +__all__ = [ + 'make_pathsim_model', + 'map_str_to_object', + 'convert_graph_to_python', +] diff --git a/src/convert_to_python.py b/src/python/convert_to_python.py similarity index 100% rename from src/convert_to_python.py rename to src/python/convert_to_python.py diff --git a/src/custom_pathsim_blocks.py b/src/python/custom_pathsim_blocks.py similarity index 100% rename from src/custom_pathsim_blocks.py rename to src/python/custom_pathsim_blocks.py diff --git a/src/pathsim_utils.py b/src/python/pathsim_utils.py similarity index 100% rename from src/pathsim_utils.py rename to src/python/pathsim_utils.py diff --git a/src/templates/__init__.py b/src/python/templates/__init__.py similarity index 100% rename from src/templates/__init__.py rename to src/python/templates/__init__.py diff --git a/src/templates/block_macros.py b/src/python/templates/block_macros.py similarity index 100% rename from src/templates/block_macros.py rename to src/python/templates/block_macros.py diff --git a/src/templates/template_with_macros.py b/src/python/templates/template_with_macros.py similarity index 98% rename from src/templates/template_with_macros.py rename to src/python/templates/template_with_macros.py index 160c07df..51bc4207 100644 --- a/src/templates/template_with_macros.py +++ b/src/python/templates/template_with_macros.py @@ -2,7 +2,7 @@ from pathsim import Simulation, Connection import numpy as np import matplotlib.pyplot as plt -import src +import fuel_cycle_sim {# Import macros #} {% from 'block_macros.py' import create_block, create_integrator_block, create_bubbler_block, create_connections, create_event -%} diff --git a/test/test_backend.py b/test/test_backend.py index 1360f425..0fb79ea8 100644 --- a/test/test_backend.py +++ b/test/test_backend.py @@ -1,5 +1,11 @@ -from src.pathsim_utils import auto_block_construction, make_connections -from src.custom_pathsim_blocks import Process, Splitter2, Splitter3, Bubbler, Integrator +from fuel_cycle_sim.pathsim_utils import auto_block_construction, make_connections +from fuel_cycle_sim.custom_pathsim_blocks import ( + Process, + Splitter2, + Splitter3, + Bubbler, + Integrator, +) import pathsim.blocks diff --git a/test/test_convert_python.py b/test/test_convert_python.py index a19e8adc..ea43894b 100644 --- a/test/test_convert_python.py +++ b/test/test_convert_python.py @@ -1,4 +1,4 @@ -from src.convert_to_python import convert_graph_to_python +from fuel_cycle_sim import convert_graph_to_python import json import pytest from pathlib import Path diff --git a/test/test_custom_blocks.py b/test/test_custom_blocks.py index 08083b75..dd92ac9d 100644 --- a/test/test_custom_blocks.py +++ b/test/test_custom_blocks.py @@ -1,6 +1,6 @@ import pathsim.blocks from pathsim import Simulation, Connection -from src.custom_pathsim_blocks import Bubbler +from fuel_cycle_sim.custom_pathsim_blocks import Bubbler def test_bubbler(): diff --git a/test/test_events.py b/test/test_events.py index 9351cac5..ba495208 100644 --- a/test/test_events.py +++ b/test/test_events.py @@ -1,5 +1,5 @@ import pytest -from src.pathsim_utils import make_events +from fuel_cycle_sim.pathsim_utils import make_events events_data = [ diff --git a/test/test_examples.py b/test/test_examples.py index 33044490..028f1daa 100644 --- a/test/test_examples.py +++ b/test/test_examples.py @@ -1,4 +1,4 @@ -from src.pathsim_utils import make_pathsim_model +from fuel_cycle_sim.pathsim_utils import make_pathsim_model import json import pytest From e9bd92cbd9f5660ebf0c206a7a0b15fb71ade441 Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 11:07:20 -0400 Subject: [PATCH 05/17] fixed backend --- package.json | 2 +- src/backend.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 8f9c0e3b..ba91c034 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "build": "vite build", "lint": "eslint .", "preview": "vite preview", - "start:backend": "python -m src.backend", + "start:backend": "python src/backend.py", "start:both": "concurrently \"npm run dev\" \"npm run start:backend\"" }, "dependencies": { diff --git a/src/backend.py b/src/backend.py index 040ee77d..e6ba6e3c 100644 --- a/src/backend.py +++ b/src/backend.py @@ -11,8 +11,8 @@ import io from contextlib import redirect_stdout, redirect_stderr -from .convert_to_python import convert_graph_to_python -from .pathsim_utils import make_pathsim_model, map_str_to_object +from fuel_cycle_sim.convert_to_python import convert_graph_to_python +from fuel_cycle_sim.pathsim_utils import make_pathsim_model, map_str_to_object from pathsim.blocks import Scope, Spectrum # Sphinx imports for docstring processing From 01224d3157cd0fcb093de49952a8328be51f8c0c Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 11:12:27 -0400 Subject: [PATCH 06/17] fixed instals --- .github/workflows/ci.yml | 1 + Dockerfile | 3 +++ pyproject.toml | 4 +--- requirements-dev.txt | 14 -------------- requirements.txt | 12 +++++++----- src/python/__init__.py | 6 +++--- 6 files changed, 15 insertions(+), 25 deletions(-) delete mode 100644 requirements-dev.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fb000c69..8fcb5966 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,6 +44,7 @@ jobs: - name: Install Python dependencies run: | python -m pip install --upgrade pip + pip install . pip install -r requirements.txt - name: Install Node.js dependencies diff --git a/Dockerfile b/Dockerfile index 35213995..27f3afc9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,6 +23,9 @@ WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt +# Install python core package +RUN pip install . + # Install gunicorn for production WSGI server RUN pip install gunicorn diff --git a/pyproject.toml b/pyproject.toml index c7cb885d..1cd6c86f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,9 +32,7 @@ dependencies = [ [project.optional-dependencies] dev = [ - "pytest", - "sphinx>=4.0.0", - "docutils>=0.17.0", + "pytest" ] diff --git a/requirements-dev.txt b/requirements-dev.txt deleted file mode 100644 index fc0eb6de..00000000 --- a/requirements-dev.txt +++ /dev/null @@ -1,14 +0,0 @@ -# Core package dependencies -pathsim>=0.7.0 -matplotlib>=3.7.0 -numpy>=1.24.0 -plotly>=6.0 - -# Web application dependencies (not needed for core package) -Flask>=3.1.1 -flask-cors>=6.0.1 - -# Development dependencies -pytest -sphinx>=4.0.0 -docutils>=0.17.0 diff --git a/requirements.txt b/requirements.txt index 98d56a24..e9a902c9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,7 @@ -# Core package dependencies only -pathsim>=0.7.0 -matplotlib>=3.7.0 -numpy>=1.24.0 -plotly>=6.0 \ No newline at end of file +# Web application dependencies (not needed for core package) +Flask>=3.1.1 +flask-cors>=6.0.1 + +# Development dependencies +sphinx>=4.0.0 +docutils>=0.17.0 diff --git a/src/python/__init__.py b/src/python/__init__.py index 7b8a78e4..18fb9282 100644 --- a/src/python/__init__.py +++ b/src/python/__init__.py @@ -14,7 +14,7 @@ # Define what gets exported when someone does "from python import *" __all__ = [ - 'make_pathsim_model', - 'map_str_to_object', - 'convert_graph_to_python', + "make_pathsim_model", + "map_str_to_object", + "convert_graph_to_python", ] From d303eaf69f4978203728e45b3d1b77cec3f2f925 Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 11:16:52 -0400 Subject: [PATCH 07/17] installs pytest --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8fcb5966..eff53b72 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,7 @@ jobs: - name: Install Python dependencies run: | python -m pip install --upgrade pip - pip install . + pip install .[dev] pip install -r requirements.txt - name: Install Node.js dependencies From e170b872229b57cb0d1b6e3d9b5293c7f31a6e10 Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 11:29:39 -0400 Subject: [PATCH 08/17] removed file --- fuel_cycle_sim/__init__.py | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 fuel_cycle_sim/__init__.py diff --git a/fuel_cycle_sim/__init__.py b/fuel_cycle_sim/__init__.py deleted file mode 100644 index 302822e7..00000000 --- a/fuel_cycle_sim/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -""" -Fuel Cycle Simulation Package - -A Python package for fuel cycle simulation with a web-based interface. -""" - -__version__ = "0.1.0" -__author__ = "Your Name" -__email__ = "your.email@example.com" - -# Import main functions for easy access -from .pathsim_utils import make_pathsim_model, map_str_to_object -from .convert_to_python import convert_graph_to_python - -# Define what gets exported when someone does "from fuel_cycle_sim import *" -__all__ = [ - "make_pathsim_model", - "map_str_to_object", - "convert_graph_to_python", -] From 198eeb80d95ac32ee93584bee6a9343809574c8f Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 11:29:47 -0400 Subject: [PATCH 09/17] comment --- src/python/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/python/__init__.py b/src/python/__init__.py index 18fb9282..ff2508ca 100644 --- a/src/python/__init__.py +++ b/src/python/__init__.py @@ -4,6 +4,7 @@ A Python package for fuel cycle simulation with pathsim integration. """ +# change this to automated versioning if needed __version__ = "0.1.0" __author__ = "Your Name" __email__ = "your.email@example.com" From f1bc14b1d9c566ce7bd0661bb4d47c1b4055ed37 Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 11:30:56 -0400 Subject: [PATCH 10/17] removed manifest --- MANIFEST.in | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 MANIFEST.in diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index 774894bf..00000000 --- a/MANIFEST.in +++ /dev/null @@ -1,9 +0,0 @@ -include README.md -include LICENSE -include PACKAGE_README.md -include pyproject.toml -recursive-include src/python *.py -recursive-include src/python/templates * -global-exclude *.pyc -global-exclude __pycache__ -global-exclude .DS_Store From 8365f26b91049e16fe85c989e64c0251daf31187 Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 11:35:57 -0400 Subject: [PATCH 11/17] moved everything to components --- src/App.jsx | 15 +++++----- src/{ => components}/ContextMenu.jsx | 0 src/{ => components}/CustomEdge.jsx | 0 src/{ => components}/DnDContext.jsx | 0 src/{ => components}/EventsTab.jsx | 0 src/{ => components}/GlobalVariablesTab.jsx | 4 +-- src/{ => components}/NodeSidebar.jsx | 2 +- src/{ => components}/PythonCodeEditor.jsx | 2 +- src/{ => components}/Sidebar.jsx | 2 +- src/{ => components}/nodes/AdderNode.jsx | 0 src/{ => components}/nodes/AmplifierNode.jsx | 0 src/{ => components}/nodes/BubblerNode.jsx | 0 src/{ => components}/nodes/ConstantNode.jsx | 0 src/{ => components}/nodes/CustomHandle.jsx | 0 src/{ => components}/nodes/DefaultNode.jsx | 0 src/{ => components}/nodes/DelayNode.jsx | 0 src/{ => components}/nodes/FunctionNode.jsx | 0 src/{ => components}/nodes/IntegratorNode.jsx | 0 src/{ => components}/nodes/MultiplierNode.jsx | 0 src/{ => components}/nodes/ProcessNode.jsx | 0 src/{ => components}/nodes/ScopeNode.jsx | 0 src/{ => components}/nodes/Splitters.jsx | 0 src/{ => components}/nodes/StepSourceNode.jsx | 0 src/{ => components}/nodes/WallNode.jsx | 0 src/nodeConfig.js | 28 +++++++++---------- 25 files changed, 26 insertions(+), 27 deletions(-) rename src/{ => components}/ContextMenu.jsx (100%) rename src/{ => components}/CustomEdge.jsx (100%) rename src/{ => components}/DnDContext.jsx (100%) rename src/{ => components}/EventsTab.jsx (100%) rename src/{ => components}/GlobalVariablesTab.jsx (99%) rename src/{ => components}/NodeSidebar.jsx (99%) rename src/{ => components}/PythonCodeEditor.jsx (98%) rename src/{ => components}/Sidebar.jsx (98%) rename src/{ => components}/nodes/AdderNode.jsx (100%) rename src/{ => components}/nodes/AmplifierNode.jsx (100%) rename src/{ => components}/nodes/BubblerNode.jsx (100%) rename src/{ => components}/nodes/ConstantNode.jsx (100%) rename src/{ => components}/nodes/CustomHandle.jsx (100%) rename src/{ => components}/nodes/DefaultNode.jsx (100%) rename src/{ => components}/nodes/DelayNode.jsx (100%) rename src/{ => components}/nodes/FunctionNode.jsx (100%) rename src/{ => components}/nodes/IntegratorNode.jsx (100%) rename src/{ => components}/nodes/MultiplierNode.jsx (100%) rename src/{ => components}/nodes/ProcessNode.jsx (100%) rename src/{ => components}/nodes/ScopeNode.jsx (100%) rename src/{ => components}/nodes/Splitters.jsx (100%) rename src/{ => components}/nodes/StepSourceNode.jsx (100%) rename src/{ => components}/nodes/WallNode.jsx (100%) diff --git a/src/App.jsx b/src/App.jsx index 3d09b5bc..34f15f30 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -14,14 +14,13 @@ import '@xyflow/react/dist/style.css'; import './styles/App.css'; import Plot from 'react-plotly.js'; import { getApiEndpoint } from './config.js'; -import Sidebar from './Sidebar'; -import NodeSidebar from './NodeSidebar'; -import { DnDProvider, useDnD } from './DnDContext.jsx'; -import ContextMenu from './ContextMenu.jsx'; -import EventsTab from './EventsTab.jsx'; -import GlobalVariablesTab from './GlobalVariablesTab.jsx'; -import { isValidPythonIdentifier } from './utils.js'; -import { makeEdge } from './CustomEdge'; +import Sidebar from './components/Sidebar'; +import NodeSidebar from './components/NodeSidebar'; +import { DnDProvider, useDnD } from './components/DnDContext.jsx'; +import ContextMenu from './components/ContextMenu.jsx'; +import EventsTab from './components/EventsTab.jsx'; +import GlobalVariablesTab from './components/GlobalVariablesTab.jsx'; +import { makeEdge } from './components/CustomEdge'; import { nodeTypes } from './nodeConfig.js'; // * Declaring variables * diff --git a/src/ContextMenu.jsx b/src/components/ContextMenu.jsx similarity index 100% rename from src/ContextMenu.jsx rename to src/components/ContextMenu.jsx diff --git a/src/CustomEdge.jsx b/src/components/CustomEdge.jsx similarity index 100% rename from src/CustomEdge.jsx rename to src/components/CustomEdge.jsx diff --git a/src/DnDContext.jsx b/src/components/DnDContext.jsx similarity index 100% rename from src/DnDContext.jsx rename to src/components/DnDContext.jsx diff --git a/src/EventsTab.jsx b/src/components/EventsTab.jsx similarity index 100% rename from src/EventsTab.jsx rename to src/components/EventsTab.jsx diff --git a/src/GlobalVariablesTab.jsx b/src/components/GlobalVariablesTab.jsx similarity index 99% rename from src/GlobalVariablesTab.jsx rename to src/components/GlobalVariablesTab.jsx index 74b6a623..40ab1337 100644 --- a/src/GlobalVariablesTab.jsx +++ b/src/components/GlobalVariablesTab.jsx @@ -1,8 +1,8 @@ -import { isValidPythonIdentifier } from './utils.js'; +import { isValidPythonIdentifier } from '../utils.js'; import PythonCodeEditor from './PythonCodeEditor'; -import './styles/PythonCodeEditor.css'; +import '../styles/PythonCodeEditor.css'; export const IdeWithAutocomplete = ({ pythonCode, setPythonCode }) => { const handleCodeExecution = (result) => { diff --git a/src/NodeSidebar.jsx b/src/components/NodeSidebar.jsx similarity index 99% rename from src/NodeSidebar.jsx rename to src/components/NodeSidebar.jsx index 5f3fea9c..d00e2637 100644 --- a/src/NodeSidebar.jsx +++ b/src/components/NodeSidebar.jsx @@ -1,4 +1,4 @@ -import { isValidPythonIdentifier } from './utils.js'; +import { isValidPythonIdentifier } from '../utils.js'; const makeVarName = (node) => { // Create a base variable name from the node label diff --git a/src/PythonCodeEditor.jsx b/src/components/PythonCodeEditor.jsx similarity index 98% rename from src/PythonCodeEditor.jsx rename to src/components/PythonCodeEditor.jsx index 36c00d13..130a8b74 100644 --- a/src/PythonCodeEditor.jsx +++ b/src/components/PythonCodeEditor.jsx @@ -2,7 +2,7 @@ import { useState, useCallback } from 'react'; import CodeMirror from '@uiw/react-codemirror'; import { vscodeDark } from '@uiw/codemirror-theme-vscode'; import { python } from '@codemirror/lang-python'; -import { getApiEndpoint } from './config.js'; +import { getApiEndpoint } from '../config.js'; const PythonCodeEditor = ({ diff --git a/src/Sidebar.jsx b/src/components/Sidebar.jsx similarity index 98% rename from src/Sidebar.jsx rename to src/components/Sidebar.jsx index 93bcfb0a..b651e148 100644 --- a/src/Sidebar.jsx +++ b/src/components/Sidebar.jsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import { useDnD } from './DnDContext'; -import { nodeCategories, getNodeDisplayName } from './nodeConfig.js'; +import { nodeCategories, getNodeDisplayName } from '../nodeConfig.js'; export default () => { const [_, setType] = useDnD(); diff --git a/src/nodes/AdderNode.jsx b/src/components/nodes/AdderNode.jsx similarity index 100% rename from src/nodes/AdderNode.jsx rename to src/components/nodes/AdderNode.jsx diff --git a/src/nodes/AmplifierNode.jsx b/src/components/nodes/AmplifierNode.jsx similarity index 100% rename from src/nodes/AmplifierNode.jsx rename to src/components/nodes/AmplifierNode.jsx diff --git a/src/nodes/BubblerNode.jsx b/src/components/nodes/BubblerNode.jsx similarity index 100% rename from src/nodes/BubblerNode.jsx rename to src/components/nodes/BubblerNode.jsx diff --git a/src/nodes/ConstantNode.jsx b/src/components/nodes/ConstantNode.jsx similarity index 100% rename from src/nodes/ConstantNode.jsx rename to src/components/nodes/ConstantNode.jsx diff --git a/src/nodes/CustomHandle.jsx b/src/components/nodes/CustomHandle.jsx similarity index 100% rename from src/nodes/CustomHandle.jsx rename to src/components/nodes/CustomHandle.jsx diff --git a/src/nodes/DefaultNode.jsx b/src/components/nodes/DefaultNode.jsx similarity index 100% rename from src/nodes/DefaultNode.jsx rename to src/components/nodes/DefaultNode.jsx diff --git a/src/nodes/DelayNode.jsx b/src/components/nodes/DelayNode.jsx similarity index 100% rename from src/nodes/DelayNode.jsx rename to src/components/nodes/DelayNode.jsx diff --git a/src/nodes/FunctionNode.jsx b/src/components/nodes/FunctionNode.jsx similarity index 100% rename from src/nodes/FunctionNode.jsx rename to src/components/nodes/FunctionNode.jsx diff --git a/src/nodes/IntegratorNode.jsx b/src/components/nodes/IntegratorNode.jsx similarity index 100% rename from src/nodes/IntegratorNode.jsx rename to src/components/nodes/IntegratorNode.jsx diff --git a/src/nodes/MultiplierNode.jsx b/src/components/nodes/MultiplierNode.jsx similarity index 100% rename from src/nodes/MultiplierNode.jsx rename to src/components/nodes/MultiplierNode.jsx diff --git a/src/nodes/ProcessNode.jsx b/src/components/nodes/ProcessNode.jsx similarity index 100% rename from src/nodes/ProcessNode.jsx rename to src/components/nodes/ProcessNode.jsx diff --git a/src/nodes/ScopeNode.jsx b/src/components/nodes/ScopeNode.jsx similarity index 100% rename from src/nodes/ScopeNode.jsx rename to src/components/nodes/ScopeNode.jsx diff --git a/src/nodes/Splitters.jsx b/src/components/nodes/Splitters.jsx similarity index 100% rename from src/nodes/Splitters.jsx rename to src/components/nodes/Splitters.jsx diff --git a/src/nodes/StepSourceNode.jsx b/src/components/nodes/StepSourceNode.jsx similarity index 100% rename from src/nodes/StepSourceNode.jsx rename to src/components/nodes/StepSourceNode.jsx diff --git a/src/nodes/WallNode.jsx b/src/components/nodes/WallNode.jsx similarity index 100% rename from src/nodes/WallNode.jsx rename to src/components/nodes/WallNode.jsx diff --git a/src/nodeConfig.js b/src/nodeConfig.js index 701f8dbb..d2017be3 100644 --- a/src/nodeConfig.js +++ b/src/nodeConfig.js @@ -1,18 +1,18 @@ // Node type definitions and categorization -import { ProcessNode, ProcessNodeHorizontal } from './nodes/ProcessNode'; -import DelayNode from './nodes/DelayNode'; -import SourceNode from './nodes/ConstantNode'; -import { AmplifierNode, AmplifierNodeReverse } from './nodes/AmplifierNode'; -import IntegratorNode from './nodes/IntegratorNode'; -import AdderNode from './nodes/AdderNode'; -import ScopeNode from './nodes/ScopeNode'; -import StepSourceNode from './nodes/StepSourceNode'; -import {createFunctionNode} from './nodes/FunctionNode'; -import DefaultNode from './nodes/DefaultNode'; -import MultiplierNode from './nodes/MultiplierNode'; -import { Splitter2Node, Splitter3Node } from './nodes/Splitters'; -import BubblerNode from './nodes/BubblerNode'; -import WallNode from './nodes/WallNode'; +import { ProcessNode, ProcessNodeHorizontal } from './components/nodes/ProcessNode'; +import DelayNode from './components/nodes/DelayNode'; +import SourceNode from './components/nodes/ConstantNode'; +import { AmplifierNode, AmplifierNodeReverse } from './components/nodes/AmplifierNode'; +import IntegratorNode from './components/nodes/IntegratorNode'; +import AdderNode from './components/nodes/AdderNode'; +import ScopeNode from './components/nodes/ScopeNode'; +import StepSourceNode from './components/nodes/StepSourceNode'; +import {createFunctionNode} from './components/nodes/FunctionNode'; +import DefaultNode from './components/nodes/DefaultNode'; +import MultiplierNode from './components/nodes/MultiplierNode'; +import { Splitter2Node, Splitter3Node } from './components/nodes/Splitters'; +import BubblerNode from './components/nodes/BubblerNode'; +import WallNode from './components/nodes/WallNode'; // Node types mapping export const nodeTypes = { From 9c39541f6c4f5c74e6780145edbda3f875f6427f Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 11:37:25 -0400 Subject: [PATCH 12/17] added python files to gitignore --- .gitignore | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.gitignore b/.gitignore index 62619fe6..84ad407e 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,12 @@ venv/ docs/_build +# python +__pycache__ +*.py[cod] +*.pyo +*.pyd +.Python +*.egg +*.egg-info + From 9ba0624072dee9d15ee11fae47576aea04a6e765 Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 11:38:58 -0400 Subject: [PATCH 13/17] fixed integration test --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eff53b72..2699e7ca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -159,6 +159,7 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip + pip install .[dev] pip install -r requirements.txt npm ci From 9158c1af826b0ae5e62b20d32d764f80289ec2fa Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 12:03:09 -0400 Subject: [PATCH 14/17] auto version --- src/python/__init__.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/python/__init__.py b/src/python/__init__.py index ff2508ca..540edec7 100644 --- a/src/python/__init__.py +++ b/src/python/__init__.py @@ -4,10 +4,12 @@ A Python package for fuel cycle simulation with pathsim integration. """ -# change this to automated versioning if needed -__version__ = "0.1.0" -__author__ = "Your Name" -__email__ = "your.email@example.com" +from importlib import metadata + +try: + __version__ = metadata.version("fuel_cycle_sim") +except Exception: + __version__ = "unknown" # Import main functions for easy access from .pathsim_utils import make_pathsim_model, map_str_to_object From a801aecdd53645e047aa770835f9565b0d7473af Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 12:06:31 -0400 Subject: [PATCH 15/17] write_to _version.py --- pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 1cd6c86f..8adde920 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,5 +46,8 @@ Issues = "https://github.com/yourusername/fuel-cycle-sim/issues" packages = ["fuel_cycle_sim"] package-dir = {"fuel_cycle_sim" = "src/python"} +[tool.setuptools_scm] +write_to = "src/python/_version.py" + [tool.setuptools.package-data] fuel_cycle_sim = ["templates/*"] From 1b6f4480356fb96364762b697deaeb0ee925a190 Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 12:07:52 -0400 Subject: [PATCH 16/17] import setuptools_sm + added _version to gitignore --- .gitignore | 2 +- pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 84ad407e..f6b52a26 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,4 @@ __pycache__ .Python *.egg *.egg-info - +*_version.py diff --git a/pyproject.toml b/pyproject.toml index 8adde920..63ab43b7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools>=61.0", "wheel"] +requires = ["setuptools>=61.0", "wheel", "setuptools-scm[toml] >= 7.0.5"] build-backend = "setuptools.build_meta" [project] From 7794f13618b626069a42cc1ea1a63fef994069ad Mon Sep 17 00:00:00 2001 From: RemDelaporteMathurin Date: Wed, 6 Aug 2025 12:12:24 -0400 Subject: [PATCH 17/17] updated readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dcc2de7a..535f2621 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,8 @@ python -m venv venv source venv/bin/activate # macOS/Linux venv\Scripts\activate # Windows -pip install -r requirements.txt +pip install -r requirements.txt # install the web app requirements (eg. Flask) +pip install -e .[dev] # install the python module containing pathsim utils ``` # Running Application You can run both frontend and backend at once