From db0ea0f103e4d8013a4e39e119881271350322a1 Mon Sep 17 00:00:00 2001 From: Alexander Spears <39826690+Alexsp32@users.noreply.github.com> Date: Wed, 7 Feb 2024 14:53:32 +0000 Subject: [PATCH 1/4] Made ASE interface aware of FixAtoms constraints --- Project.toml | 8 +++++++- ext/AdvancedASEFunctions.jl | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 ext/AdvancedASEFunctions.jl diff --git a/Project.toml b/Project.toml index 9a89b5d..c157d8d 100644 --- a/Project.toml +++ b/Project.toml @@ -19,6 +19,12 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" UnitfulAtomic = "a7773ee8-282e-5fa2-be4e-bd808c38a91a" +[weakdeps] +PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" + +[extensions] +AdvancedASEFunctions = "PyCall" + [compat] FastGaussQuadrature = "0.4, 0.5, 1" ForwardDiff = "0.10" @@ -30,7 +36,7 @@ Requires = "1" StaticArrays = "1" Unitful = "1" UnitfulAtomic = "1" -julia = "1.7" +julia = "≥1.9" [extras] FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" diff --git a/ext/AdvancedASEFunctions.jl b/ext/AdvancedASEFunctions.jl new file mode 100644 index 0000000..2518446 --- /dev/null +++ b/ext/AdvancedASEFunctions.jl @@ -0,0 +1,14 @@ +module AdvancedASEFunctions +using NQCModels, PyCall + +""" +This module contains methods related to the NQCModels ASE interface that need access to Python types. (e.g. constraint checking) +""" + +function NQCModels.mobileatoms(model::NQCModels.AdiabaticModels.AdiabaticASEModel, n::Int) + ase=pyimport("ase") + constraints_FixAtoms=isa.(model.atoms.constraints, typeof(ase.constraints.FixAtoms)) + return symdiff(1:length(model.atoms), [constraint.get_indices() .+ 1 for constraint in model.atoms.constraints[constraints_FixAtoms]]...) +end + +end \ No newline at end of file From 391f0380afe2758966fe47a7e522fbb94cc5860f Mon Sep 17 00:00:00 2001 From: Alexander Spears <39826690+Alexsp32@users.noreply.github.com> Date: Mon, 29 Apr 2024 10:22:57 +0100 Subject: [PATCH 2/4] Update constraint logic if no constraints found. --- ext/AdvancedASEFunctions.jl | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/ext/AdvancedASEFunctions.jl b/ext/AdvancedASEFunctions.jl index 2518446..3ef5427 100644 --- a/ext/AdvancedASEFunctions.jl +++ b/ext/AdvancedASEFunctions.jl @@ -1,14 +1,24 @@ module AdvancedASEFunctions using NQCModels, PyCall +const ase = PyNULL() + +function __init__() + copy!(ase, pyimport("ase")) +end + """ -This module contains methods related to the NQCModels ASE interface that need access to Python types. (e.g. constraint checking) +This module contains methods related to the NQCModels ASE interface that need access to Python types. (e.g. constraint checking) """ function NQCModels.mobileatoms(model::NQCModels.AdiabaticModels.AdiabaticASEModel, n::Int) - ase=pyimport("ase") constraints_FixAtoms=isa.(model.atoms.constraints, typeof(ase.constraints.FixAtoms)) - return symdiff(1:length(model.atoms), [constraint.get_indices() .+ 1 for constraint in model.atoms.constraints[constraints_FixAtoms]]...) + ase_constraints = [constraint for constraint in model.atoms.constraints[constraints_FixAtoms]] + if length(ase_constraints) == 0 + return 1:length(model.atoms) + else + return symdiff(1:length(model.atoms), [constraint.get_indices() .+ 1 for constraint in constraints]...) + end end -end \ No newline at end of file +end From bedb74857de04a29fe783ce9545d35979904a0bd Mon Sep 17 00:00:00 2001 From: Alexander Spears <39826690+Alexsp32@users.noreply.github.com> Date: Mon, 29 Apr 2024 10:37:43 +0100 Subject: [PATCH 3/4] Can't type check FixAtoms constraints so will have to take all constraints in good faith --- ext/AdvancedASEFunctions.jl | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/ext/AdvancedASEFunctions.jl b/ext/AdvancedASEFunctions.jl index 3ef5427..339ccdd 100644 --- a/ext/AdvancedASEFunctions.jl +++ b/ext/AdvancedASEFunctions.jl @@ -1,19 +1,13 @@ module AdvancedASEFunctions using NQCModels, PyCall -const ase = PyNULL() - -function __init__() - copy!(ase, pyimport("ase")) -end """ This module contains methods related to the NQCModels ASE interface that need access to Python types. (e.g. constraint checking) """ function NQCModels.mobileatoms(model::NQCModels.AdiabaticModels.AdiabaticASEModel, n::Int) - constraints_FixAtoms=isa.(model.atoms.constraints, typeof(ase.constraints.FixAtoms)) - ase_constraints = [constraint for constraint in model.atoms.constraints[constraints_FixAtoms]] + ase_constraints = [constraint for constraint in model.atoms.constraints] if length(ase_constraints) == 0 return 1:length(model.atoms) else From 9a1657c06276b3104cded9f1e0620d8fe66fb1ee Mon Sep 17 00:00:00 2001 From: Alexander Spears Date: Mon, 13 May 2024 15:43:03 +0100 Subject: [PATCH 4/4] Fixed distribution generation from Simulation --- ext/AdvancedASEFunctions.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/AdvancedASEFunctions.jl b/ext/AdvancedASEFunctions.jl index 339ccdd..d20cd8b 100644 --- a/ext/AdvancedASEFunctions.jl +++ b/ext/AdvancedASEFunctions.jl @@ -11,7 +11,7 @@ function NQCModels.mobileatoms(model::NQCModels.AdiabaticModels.AdiabaticASEMode if length(ase_constraints) == 0 return 1:length(model.atoms) else - return symdiff(1:length(model.atoms), [constraint.get_indices() .+ 1 for constraint in constraints]...) + return symdiff(1:length(model.atoms), [constraint.get_indices() .+ 1 for constraint in ase_constraints]...) end end