|
1 | 1 | ## PythonCall specific usage
|
2 | 2 | Base.convert(::Type{S}, x::Sym{T}) where {T <: PythonCall.Py, S<:Sym} = x
|
| 3 | +Base.convert(::Type{S}, x::Sym{T}) where {T <: PythonCall.Py, |
| 4 | + S<:Sym{PythonCall.Py}} = x |
3 | 5 | Base.convert(::Type{S}, x::T) where {T<:PythonCall.Py, S <: SymbolicObject} = Sym(x)
|
4 | 6 |
|
5 | 7 | SymPyCore._convert(::Type{T}, x) where {T} = pyconvert(T, x)
|
6 | 8 | function SymPyCore._convert(::Type{Bool}, x::Py)
|
7 |
| - pyconvert(Bool, x == _sympy_.logic.boolalg.BooleanTrue) && return true |
8 |
| - pyconvert(Bool, x == _sympy_.logic.boolalg.BooleanFalse) && return false |
| 9 | + pyisinstance(x, _sympy_.logic.boolalg.BooleanTrue) && return true |
| 10 | + pyisinstance(x, _sympy_.logic.boolalg.BooleanFalse) && return false |
9 | 11 | pyconvert(Bool, pybool(x))
|
10 | 12 | end
|
11 | 13 |
|
| 14 | +function SymPyCore.Bool3(x::Sym{T}) where {T <: PythonCall.Py} |
| 15 | + y = ↓(x) |
| 16 | + isnothing(y) && return nothing |
| 17 | + if hasproperty(y, "is_Boolean") |
| 18 | + if pyconvert(Bool, y.is_Boolean) |
| 19 | + return SymPyCore._convert(Bool, y) |
| 20 | + end |
| 21 | + elseif hasproperty(y, "__bool__") |
| 22 | + if pyconvert(Bool, y.__bool__ != ↓(Sym(nothing))) |
| 23 | + return pyconvert(Bool, y.__bool__()) |
| 24 | + end |
| 25 | + end |
| 26 | + return nothing |
| 27 | +end |
12 | 28 |
|
13 | 29 | ## Modifications for ↓, ↑
|
14 | 30 | Sym(x::Nothing) = Sym(pybuiltins.None)
|
|
0 commit comments