diff --git a/.gitignore b/.gitignore index b067edd..9b19d9c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /Manifest.toml +.CondaPkg/ \ No newline at end of file diff --git a/CondaPkg.toml b/CondaPkg.toml new file mode 100644 index 0000000..b70f04c --- /dev/null +++ b/CondaPkg.toml @@ -0,0 +1,3 @@ + +[pip.deps] +colabdesign = "@ https://github.com/sokrypton/ColabDesign/archive/refs/tags/v1.1.2.tar.gz" diff --git a/Project.toml b/Project.toml index 9ee3ef4..14a41db 100644 --- a/Project.toml +++ b/Project.toml @@ -1,14 +1,15 @@ name = "ColabMPNN" uuid = "434c8270-3839-45f3-8f5c-492a580b2514" -authors = ["anton083 and contributors"] -version = "0.0.1" +authors = ["Anton Oresten and contributors"] +version = "0.0.2" [deps] -Conda = "8f4d0f93-b110-5947-807f-2305c1781a2d" -Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" +CondaPkg = "992eb4ea-22a4-4c89-a5bb-47a3300528ab" +PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" [compat] +CondaPkg = "0.2.24" +PythonCall = "0.9.23" julia = "1" [extras] diff --git a/src/ColabMPNN.jl b/src/ColabMPNN.jl index aa97755..f8b8ccd 100644 --- a/src/ColabMPNN.jl +++ b/src/ColabMPNN.jl @@ -4,23 +4,11 @@ export mpnn export Samples, Score export mk_mpnn_model, prep_inputs, sample, sample_parallel, score, get_unconditional_logits -import Pkg -using Conda, PyCall +using PythonCall -const mpnn = PyNULL() +const mpnn = PythonCall.pynew() -function __init__() - ENV["PYTHON"] = "" - Pkg.build("PyCall") - - if !haskey(Conda._installed_packages_dict(), "colabdesign") - Conda.pip_interop(true) - Conda.pip("install", "git+https://github.com/sokrypton/ColabDesign.git@v1.1.1") - Conda.add("colabdesign") - end - - copy!(mpnn, pyimport_conda("colabdesign.mpnn", "colabdesign")) -end +__init__() = PythonCall.pycopy!(mpnn, pyimport("colabdesign.mpnn")) struct Samples seq::Vector{String} @@ -30,8 +18,8 @@ struct Samples decoding_order::Array{Int32, 3} S::Array{Float32, 3} - function Samples(samples::Dict{Any, Any}) - new([samples[string(f)] for f in fieldnames(Samples)]...) + function Samples(samples::PyDict) + new([pyconvert(Any, samples[Py(string(f))]) for f in fieldnames(Samples)]...) end end @@ -42,8 +30,8 @@ struct Score decoding_order::Array{Int32, 1} S::Array{Float32, 2} - function Score(scores::Dict{Any, Any}) - new([scores[string(f)] for f in fieldnames(Score)]...) + function Score(scores::PyDict) + new([pyconvert(Any, scores[pystr(string(f))]) for f in fieldnames(Score)]...) end end @@ -83,7 +71,7 @@ prep_inputs(mpnn_model, args...; kwargs...) = mpnn_model.prep_inputs(args...; kw rescore=false, ) """ -sample(mpnn_model, args...; kwargs...) = Samples(mpnn_model.sample(args...; kwargs...)) +sample(mpnn_model, args...; kwargs...) = Samples(PyDict(mpnn_model.sample(args...; kwargs...))) """ sample_parallel(mpnn_model, @@ -92,18 +80,18 @@ sample(mpnn_model, args...; kwargs...) = Samples(mpnn_model.sample(args...; kwar rescore=false, ) """ -sample_parallel(mpnn_model, args...; kwargs...) = Samples(mpnn_model.sample_parallel(args...; kwargs...)) +sample_parallel(mpnn_model, args...; kwargs...) = Samples(PyDict(mpnn_model.sample_parallel(args...; kwargs...))) """ score(mpnn_model, seq=nothing, ) """ -score(mpnn_model, args...; kwargs...) = Score(mpnn_model.score(args...; kwargs...)) +score(mpnn_model, args...; kwargs...) = Score(PyDict(mpnn_model.score(args...; kwargs...))) """ get_unconditional_logits(mpnn_model) """ -get_unconditional_logits(mpnn_model) = mpnn_model.get_unconditional_logits() +get_unconditional_logits(mpnn_model) = pyconvert(Array, mpnn_model.get_unconditional_logits()) end