Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Overhaul RMG-RMS Python-Julia dependencies #256

Open
wants to merge 28 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
32dc883
ignore automatically generated files
hwpang Jun 23, 2024
80b4828
Add channels
hwpang Jun 23, 2024
5d59536
Remove yml file as it's not used anymore, using CondaPkg to manage env
hwpang Jun 23, 2024
2300cf6
Switch to CondaPkg, PythonCall, PythonPlot
hwpang Jun 23, 2024
aef963e
Remove unused dependency
hwpang Jun 23, 2024
5653f7c
Update version
hwpang Jun 23, 2024
e0c6c4b
bump to 1.10
hwpang Jun 23, 2024
dfe380d
No need to install env beforehand
hwpang Jun 23, 2024
b9e777d
Install with CondaPkg
hwpang Jun 23, 2024
0b3e7fd
Switch to 1.10 and no need to create env
hwpang Jun 23, 2024
82e1d58
export env path for CondaPkg
hwpang Jun 23, 2024
a857031
Update build to use CondaPkg
hwpang Jun 23, 2024
1f43a40
Update installation instruction
hwpang Jun 23, 2024
db530a2
Use PythonPlot instead of PyPlot
hwpang Jun 23, 2024
9163eed
Switch to PythonPlot
hwpang Jun 23, 2024
3b0447d
Switch parsing to PythonCall and PythonPlot
hwpang Jun 23, 2024
5f572c8
Switch plotting to pythonplot
hwpang Jun 23, 2024
9ab4354
Use PythonCall syntax in module
hwpang Jun 23, 2024
1d8a45f
Don't set jacobian prototype if jacobian is not sparse
hwpang Jun 23, 2024
57164e7
Switch to pythoncall syntax in test
hwpang Jun 23, 2024
18cd0ed
Import necessary packages
hwpang Jun 23, 2024
85dd259
Use SciMLSensitivity
hwpang Jun 23, 2024
58c7094
Change rtol
hwpang Jun 23, 2024
6b8f26d
Add propane mech test file
hwpang Jun 23, 2024
827a1a4
Use >= 3.9
hwpang Jul 2, 2024
56b4a03
keys(CondaPkg.current_packages()) doesn't actually show the packages …
hwpang Jul 3, 2024
67fbb38
Should be molecule
hwpang Jul 3, 2024
a84641c
skip unused line
JacksonBurns Jan 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 8 additions & 12 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v1
with:
version: 1.8
version: '1.10'
- uses: actions/cache@v1
env:
cache-name: cache-artifacts
Expand All @@ -24,21 +24,17 @@ jobs:
${{ runner.os }}-test-${{ env.cache-name }}-
${{ runner.os }}-test-
${{ runner.os }}-
- uses: conda-incubator/setup-miniconda@v2
with:
environment-file: environment.yml
python-version: 3.7
activate-environment: rms_env
- name: Fix PyCall linking
run: |
julia -e 'ENV["PYTHON"]=ENV["CONDA"] * "/envs/rms_env/bin/python"; using Pkg; Pkg.add("PyCall"); Pkg.build("PyCall")'
- uses: julia-actions/julia-buildpkg@v1
- name: Build
run: |
julia -e 'using Pkg; Pkg.develop(PackageSpec(path="../ReactionMechanismSimulator.jl")); Pkg.build("ReactionMechanismSimulator");'
current_path=${{ github.workspace }}
export JULIA_CONDAPKG_ENV="$current_path/rms_env"
julia -e 'using Pkg; Pkg.develop(Pkg.PackageSpec(path="../ReactionMechanismSimulator.jl/")); Pkg.build("ReactionMechanismSimulator");'
- name: Run tests
run: |
julia -e 'using Pkg; Pkg.test("ReactionMechanismSimulator";coverage=true)'
current_path=${{ github.workspace }}
export JULIA_CONDAPKG_ENV="$current_path/rms_env"
mjohnson541 marked this conversation as resolved.
Show resolved Hide resolved
julia -e 'using Pkg; Pkg.test("ReactionMechanismSimulator"; coverage=true)'
- uses: julia-actions/julia-processcoverage@v1
- uses: codecov/codecov-action@v1
with:
Expand Down
17 changes: 8 additions & 9 deletions .github/workflows/documentation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,17 @@ jobs:
- uses: actions/checkout@v2
- uses: julia-actions/setup-julia@latest
with:
version: 1.8
- uses: conda-incubator/setup-miniconda@v2
with:
environment-file: environment.yml
python-version: 3.7
activate-environment: rms_env
version: '1.10'
- name: Install dependencies
run: |
julia -e 'ENV["PYTHON"]=ENV["CONDA"] * "/envs/rms_env/bin/python"; using Pkg; Pkg.add("PyCall"); Pkg.build("PyCall")'
julia --project=docs/ -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate();'
current_path=${{ github.workspace }}
export JULIA_CONDAPKG_ENV="$current_path/rms_env"
julia --project=docs/ -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.build("ReactionMechanismSimulator");'
- name: Build and deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # For authentication with GitHub Actions token
DOCUMENTER_DEBUG: true
run: julia --color=yes --project=docs docs/make.jl
run: |
current_path=${{ github.workspace }}
export JULIA_CONDAPKG_ENV="$current_path/rms_env"
julia --color=yes --project=docs docs/make.jl
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,8 @@
*.dot
docs/build/
.DS_Store
deps/build.log
deps/build.log
.CondaPkg/
rms_env/
*.cov
Manifest.toml
1 change: 1 addition & 0 deletions CondaPkg.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
channels = ["defaults", "mjohnson541", "rmg", "conda-forge", "cantera"]
14 changes: 6 additions & 8 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ version = "1.0.0"
[deps]
Calculus = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
Colors = "5ae59095-9a9b-59fe-a467-6f913c188581"
Conda = "8f4d0f93-b110-5947-807f-2305c1781a2d"
CondaPkg = "992eb4ea-22a4-4c89-a5bb-47a3300528ab"
CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
FastGaussQuadrature = "442a2c76-b920-505d-bb47-c5924d526838"
Expand All @@ -21,8 +21,8 @@ ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
Parameters = "d96e819e-fc66-5662-9728-84c9c7592b0a"
PreallocationTools = "d236fae5-4411-538c-8e31-a6e3d9e00b46"
PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0"
PyPlot = "d330b81b-6aea-500a-939a-2ce795aea3ee"
PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d"
PythonPlot = "274fc56d-3b97-40fa-a1cd-1b4a50311bf9"
QuartzImageIO = "dca85d43-d64c-5e67-8c65-017450d5d020"
RecursiveArrayTools = "731186ca-8d62-57ce-b412-fbd966d074cd"
ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
Expand All @@ -39,12 +39,11 @@ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c"
Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
YAML = "ddb6d928-2868-570f-bddf-ab3f9cf99eb6"
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"

[compat]
Calculus = "0.4,0.5"
Colors = "0.11,0.12"
Conda = "1"
CondaPkg = "0"
CSV = "0.10"
DataFrames = "1"
SciMLSensitivity = "^7"
Expand All @@ -58,8 +57,8 @@ ModelingToolkit = "8"
OrdinaryDiffEq = "^6"
Parameters = "0.12"
PreallocationTools = "0.4"
PyCall = "1"
PyPlot = "2"
PythonCall = "0"
PythonPlot = "1"
QuartzImageIO = "0.7"
RecursiveArrayTools = "2.17"
ReverseDiff = "1.9"
Expand All @@ -72,5 +71,4 @@ Symbolics = "4"
Tracker = "0.2"
Unitful = "^1.3"
YAML = "0.4"
Zygote = "0.5,0.6"
julia = "^1.6"
48 changes: 28 additions & 20 deletions deps/build.jl
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
using PyCall
using Conda
packages = Conda._installed_packages()
if !("rmg" in packages) && !("rmgmolecule" in packages) && (PyCall.pyversion.major != 3 || PyCall.pyversion.minor != 7)
const Pkg = Base.require(Base.PkgId(Base.UUID("44cfe95a-1eb2-52ea-b672-e2afdf69b78f"), "Pkg"))
Conda.rm("mamba")
Conda.add("conda=4")
Conda.add("mamba")
Conda.update()
Conda.add("python=3.7")
try
Conda.rm("numpy") #get around MKL problem
catch e
using CondaPkg
using PythonCall

has_rmgpy = true
has_rmgmolecule = true
try
PythonCall.pyimport("rmgpy")
catch
has_rmgpy = false
end
try
PythonCall.pyimport("molecule")
catch
has_rmgmolecule = false
end

if !has_rmgpy && !has_rmgmolecule

if !(v"3.7" <= PythonCall.C.python_version() && PythonCall.C.python_version() <= v"3.9")
CondaPkg.add("python"; version=">=3.9")
end
Conda.add("nomkl")
Conda.add("numpy")
Conda.add_channel("mjohnson541")
Conda.add_channel("hwpang")
Conda.add("rmgmolecule")
Pkg.build("PyCall")
end
CondaPkg.add("rmgmolecule"; version=">=0.3.0", channel="mjohnson541")
CondaPkg.add("matplotlib", channel="conda-forge")
CondaPkg.add("rdkit", channel="conda-forge")
CondaPkg.add("pydot", channel="conda-forge")
end

const Pkg = Base.require(Base.PkgId(Base.UUID("44cfe95a-1eb2-52ea-b672-e2afdf69b78f"), "Pkg"))
Pkg.build("PythonCall")
11 changes: 6 additions & 5 deletions docs/src/Installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,10 @@ The above instructions will automatically handle Julia-Python linking. However,

```
import Pkg
Pkg.add("PyCall")
ENV["CONDA_JL_HOME"] = PATH_TO_YOUR_ENV
Pkg.build("Conda")
ENV["PYTHON"] = PATH_TO_PYTHON
Pkg.build("PyCall")
ENV["JULIA_CONDAPKG_BACKEND"] = "Null"
ENV["JULIA_PYTHONCALL_EXE"] = "/path/to/python"
Pkg.add("CondaPkg")
Pkg.build("CondaPkg")
Pkg.add("PythonCall")
Pkg.build("PythonCall")
```
11 changes: 0 additions & 11 deletions environment.yml

This file was deleted.

2 changes: 1 addition & 1 deletion iJulia/Automatic Mechanism Analysis Example.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"outputs": [],
"source": [
"using Sundials\n",
"using PyPlot\n",
"using PythonPlot\n",
"using ReactionMechanismSimulator"
]
},
Expand Down
2 changes: 1 addition & 1 deletion iJulia/ConstantPH2Combustion.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"outputs": [],
"source": [
"using DifferentialEquations\n",
"using PyPlot\n",
"using PythonPlot\n",
"using ReactionMechanismSimulator"
]
},
Expand Down
2 changes: 1 addition & 1 deletion iJulia/ConstantTPH2Combustion.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"using DiffEqBase\n",
"using Sundials\n",
"using DiffEqSensitivity\n",
"using PyPlot\n",
"using PythonPlot\n",
"using ReactionMechanismSimulator"
]
},
Expand Down
2 changes: 1 addition & 1 deletion iJulia/ConstantTVOctaneOxidation.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"outputs": [],
"source": [
"using DifferentialEquations\n",
"using PyPlot\n",
"using PythonPlot\n",
"using ReactionMechanismSimulator"
]
},
Expand Down
2 changes: 1 addition & 1 deletion iJulia/ConstantVH2Combustion.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"outputs": [],
"source": [
"using DifferentialEquations\n",
"using PyPlot\n",
"using PythonPlot\n",
"using ReactionMechanismSimulator"
]
},
Expand Down
2 changes: 1 addition & 1 deletion iJulia/Gas-Catalyst Interface.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"outputs": [],
"source": [
"using ReactionMechanismSimulator\n",
"using PyPlot\n",
"using PythonPlot\n",
"using DifferentialEquations\n",
"using Sundials"
]
Expand Down
2 changes: 1 addition & 1 deletion iJulia/ParametrizedTConstantVOctaneOxidation.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"outputs": [],
"source": [
"using DifferentialEquations\n",
"using PyPlot\n",
"using PythonPlot\n",
"using ReactionMechanismSimulator"
]
},
Expand Down
2 changes: 1 addition & 1 deletion iJulia/ParametrizedTPH2Combustion.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"outputs": [],
"source": [
"using DifferentialEquations\n",
"using PyPlot\n",
"using PythonPlot\n",
"using ReactionMechanismSimulator"
]
},
Expand Down
2 changes: 1 addition & 1 deletion iJulia/ParametrizedVH2Combustion.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"outputs": [],
"source": [
"using DifferentialEquations\n",
"using PyPlot\n",
"using PythonPlot\n",
"using ReactionMechanismSimulator"
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"source": [
"using ReactionMechanismSimulator\n",
"using ReactionMechanismSimulator.Sundials\n",
"using ReactionMechanismSimulator.PyPlot"
"using ReactionMechanismSimulator.PythonPlot"
]
},
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1429,7 +1429,7 @@
"source": [
"using ReactionMechanismSimulator\n",
"using ReactionMechanismSimulator.Sundials\n",
"using ReactionMechanismSimulator.PyPlot"
"using ReactionMechanismSimulator.PythonPlot"
]
},
{
Expand Down
14 changes: 7 additions & 7 deletions src/Parse.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Unitful
using YAML
using PyCall
using PythonCall
using StaticArrays

module Calc
Expand Down Expand Up @@ -131,7 +131,7 @@ function getatomdictfromrdkit(mol)
atmD = Dict{String,Int64}()
molecularweight = 0.0
for atm in mol.GetAtoms()
v = elementdict[atm.GetAtomicNum()]
v = elementdict[PythonCall.pyconvert(Int64, atm.GetAtomicNum())]
if v in keys(atmD)
atmD[v] += 1
else
Expand All @@ -140,9 +140,9 @@ function getatomdictfromrdkit(mol)
end
nbonds = length(mol.GetBonds())
try
molecularweight = Desc.MolWt(mol)/1000.0
catch
@warn("unable to compute molecular weight")
molecularweight = PythonCall.pyconvert(Float64, Desc.MolWt(mol)) / 1000.0
catch e
@warn("unable to compute molecular weight: $e")
end
return atmD,nbonds,molecularweight
end
Expand All @@ -151,15 +151,15 @@ export getatomdictfromrdkit
function getatomdictfromrmg(mol)
atmD = Dict{String,Int64}()
for atm in mol.atoms
v = elementdict[atm.element.number]
v = elementdict[PythonCall.pyconvert(Int64, atm.element.number)]
if v in keys(atmD)
atmD[v] += 1
else
atmD[v] = 1
end
end
nbonds = length(mol.get_all_edges())
molecularweight = mol.get_molecular_weight()
molecularweight = PythonCall.pyconvert(Float64, mol.get_molecular_weight())
return atmD,nbonds,molecularweight
end
function getatomdictsmiles(smiles)
Expand Down
4 changes: 2 additions & 2 deletions src/Plotting.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using PyPlot
using PythonPlot

"""
Plot the mole fractions of the simulation bsol from t0 to tf
Expand Down Expand Up @@ -484,7 +484,7 @@ function plottimescales(Jy;taumax=1e6,taumin=1e-18,taures=10.0^0.5,usediag=true)
else
taus = 1.0./abs.(eigvals(Jy))
end
PyPlot.hist([x==Inf ? 0.0 : x for x in taus],bins=10.0.^(log10(taumin):log10(taures):log10(taumax)))
PythonPlot.hist([x == Inf ? 0.0 : x for x in taus], bins=10.0 .^ (log10(taumin):log10(taures):log10(taumax)))
xscale("log")
xlabel("Species Time Scale [sec]")
ylabel("Counts")
Expand Down
Loading
Loading