From a44929386b962c6d55d0e8a607fd630676cad498 Mon Sep 17 00:00:00 2001 From: jverzani Date: Fri, 24 May 2024 12:02:39 -0400 Subject: [PATCH 1/2] bool3 --- Project.toml | 4 ++-- src/python_connection.jl | 22 ++++++++++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/Project.toml b/Project.toml index 9482abd..536f12d 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.2.6" +version = "0.3.0" [deps] @@ -28,7 +28,7 @@ PythonCall = "0.9" SpecialFunctions = "0.8, 0.9, 0.10, 1.0, 2" Symbolics = "5" SymbolicUtils = "1" -SymPyCore = "0.1.6, 1" +SymPyCore = "0.2, 1" julia = "1.6.1" diff --git a/src/python_connection.jl b/src/python_connection.jl index e9bcc2a..295e408 100644 --- a/src/python_connection.jl +++ b/src/python_connection.jl @@ -1,15 +1,33 @@ ## PythonCall specific usage Base.convert(::Type{S}, x::Sym{T}) where {T <: PythonCall.Py, S<:Sym} = x +Base.convert(::Type{S}, x::Sym{T}) where {T<:PythonCall.Py S<:Sym{PythonCall.Py}} = x Base.convert(::Type{S}, x::T) where {T<:PythonCall.Py, S <: SymbolicObject} = Sym(x) SymPyCore._convert(::Type{T}, x) where {T} = pyconvert(T, x) function SymPyCore._convert(::Type{Bool}, x::Py) - pyconvert(Bool, x == _sympy_.logic.boolalg.BooleanTrue) && return true - pyconvert(Bool, x == _sympy_.logic.boolalg.BooleanFalse) && return false + pyisinstance(x, _sympy_.logic.boolalg.BooleanTrue) && return true + pyisinstance(x, _sympy_.logic.boolalg.BooleanFalse) && return false pyconvert(Bool, pybool(x)) end +SymPyCore.Bool3(::Sym{Nothing}) = nothing + +function SymPyCore.Bool3(x::Sym{T}) where {T <: PythonCall.Py} + y = ↓(x) + isnothing(y) && return nothing + if hasproperty(y, "is_Boolean") + if pyconvert(Bool, y.is_Boolean) + return SymPyCore._convert(Bool, y) + end + elseif hasproperty(y, "__bool__") + if pyconvert(Bool, y.__bool__ != ↓(Sym(nothing))) + return pyconvert(Bool, y.__bool__()) + end + end + return nothing +end + ## Modifications for ↓, ↑ Sym(x::Nothing) = Sym(pybuiltins.None) From 22ed82c079f61fd4cdc20f2054fa6a04b37fea30 Mon Sep 17 00:00:00 2001 From: jverzani Date: Fri, 24 May 2024 12:38:05 -0400 Subject: [PATCH 2/2] oops --- src/python_connection.jl | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/python_connection.jl b/src/python_connection.jl index 295e408..562ae4b 100644 --- a/src/python_connection.jl +++ b/src/python_connection.jl @@ -1,6 +1,7 @@ ## PythonCall specific usage Base.convert(::Type{S}, x::Sym{T}) where {T <: PythonCall.Py, S<:Sym} = x -Base.convert(::Type{S}, x::Sym{T}) where {T<:PythonCall.Py S<:Sym{PythonCall.Py}} = x +Base.convert(::Type{S}, x::Sym{T}) where {T <: PythonCall.Py, + S<:Sym{PythonCall.Py}} = x Base.convert(::Type{S}, x::T) where {T<:PythonCall.Py, S <: SymbolicObject} = Sym(x) SymPyCore._convert(::Type{T}, x) where {T} = pyconvert(T, x) @@ -10,9 +11,6 @@ function SymPyCore._convert(::Type{Bool}, x::Py) pyconvert(Bool, pybool(x)) end - -SymPyCore.Bool3(::Sym{Nothing}) = nothing - function SymPyCore.Bool3(x::Sym{T}) where {T <: PythonCall.Py} y = ↓(x) isnothing(y) && return nothing