diff --git a/Project.toml b/Project.toml index 3ab37f7..239c828 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "SymPyPythonCall" uuid = "bc8888f7-b21e-4b7c-a06a-5d9c9496438c" authors = ["jverzani and contributors"] -version = "0.5.0" +version = "0.5.1" [deps] diff --git a/src/python_connection.jl b/src/python_connection.jl index 562ae4b..3233794 100644 --- a/src/python_connection.jl +++ b/src/python_connection.jl @@ -34,9 +34,12 @@ SymPyCore.:↓(d::Dict) = pydict((↓(k) => ↓(v) for (k,v) ∈ pairs(d))) SymPyCore.:↓(x::Set) = _sympy_.sympify(pyset(↓(sᵢ) for sᵢ ∈ x)) SymPyCore.:↑(::Type{<:AbstractString}, x) = Sym(Py(x)) + +_Set(x) = Set(x) +_Set(xs...) = Set(xs) function SymPyCore.:↑(::Type{PythonCall.Py}, x) # this lower level approach shouldn't allocate - pyisinstance(x, pybuiltins.set) && return Set(Sym.(collect(x))) #Set(↑(xᵢ) for xᵢ ∈ x) + pyisinstance(x, pybuiltins.set) && return _Set(collect(map(↑, x))...) pyisinstance(x, pybuiltins.tuple) && return Tuple(↑(xᵢ) for xᵢ ∈ x) pyisinstance(x, pybuiltins.list) && return [↑(xᵢ) for xᵢ ∈ x] pyisinstance(x, pybuiltins.dict) && return Dict(↑(k) => ↑(x[k]) for k ∈ x)