Skip to content

Error for code with PythonCall that works with PyCall #576

@karlwessel

Description

@karlwessel

Affects: PythonCall

Describe the bug
The following code throws an error:

using PythonCall
np = pyimport("numpy")
d3 = pyimport("dedalus.public")
coords = d3.CartesianCoordinates("x")
dist = d3.Distributor(coords, dtype=np.float64)
xbasis = d3.RealFourier(coords["x"], size=16, bounds=(0,1))
B = dist.VectorField(coords, name="B", bases=(xbasis))
problem = d3.IVP([B])

problem.add_equation(pytuple((d3.dt(B) - d3.Laplacian(B), 0)))

ERROR: Python: Julia: TypeError: non-boolean (Py) used in boolean context
Stacktrace:
  [1] in
    @ ./operators.jl:1309 [inlined]
  [2] pyjlany_contains(self::Vector{Py}, v::Py)
    @ PythonCall.JlWrap ~/.julia/packages/PythonCall/Nr75f/src/JlWrap/any.jl:117
  [3] _pyjl_callmethod(f::Any, self_::Ptr{PythonCall.C.PyObject}, args_::Ptr{PythonCall.C.PyObject}, nargs::Int64)
    @ PythonCall.JlWrap ~/.julia/packages/PythonCall/Nr75f/src/JlWrap/base.jl:67
  [4] _pyjl_callmethod(o::Ptr{PythonCall.C.PyObject}, args::Ptr{PythonCall.C.PyObject})
    @ PythonCall.JlWrap.Cjl ~/.julia/packages/PythonCall/Nr75f/src/JlWrap/C.jl:63
  [5] PyObject_CallObject
    @ ~/.julia/packages/PythonCall/Nr75f/src/C/pointers.jl:303 [inlined]
  [6] macro expansion
    @ ~/.julia/packages/PythonCall/Nr75f/src/Core/Py.jl:132 [inlined]
  [7] pycallargs(f::Py, args::Py)
    @ PythonCall.Core ~/.julia/packages/PythonCall/Nr75f/src/Core/builtins.jl:220
  [8] pycall(::Py, ::Py, ::Vararg{Py}; kwargs::@Kwargs{})
    @ PythonCall.Core ~/.julia/packages/PythonCall/Nr75f/src/Core/builtins.jl:243
  [9] pycall(::Py, ::Py, ::Vararg{Py})
    @ PythonCall.Core ~/.julia/packages/PythonCall/Nr75f/src/Core/builtins.jl:233
 [10] (::Py)(::Py, ::Vararg{Py}; kwargs::@Kwargs{})
    @ PythonCall.Core ~/.julia/packages/PythonCall/Nr75f/src/Core/Py.jl:357
 [11] top-level scope
    @ REPL[13]:1
 [12] eval
    @ ./boot.jl:430 [inlined]
 [13] eval_user_input(ast::Any, backend::REPL.REPLBackend, mod::Module)
    @ REPL ~/.julia/juliaup/julia-1.11.1+0.x64.linux.gnu/share/julia/stdlib/v1.11/REPL/src/REPL.jl:245
 [14] repl_backend_loop(backend::REPL.REPLBackend, get_module::Function)
    @ REPL ~/.julia/juliaup/julia-1.11.1+0.x64.linux.gnu/share/julia/stdlib/v1.11/REPL/src/REPL.jl:342
 [15] start_repl_backend(backend::REPL.REPLBackend, consumer::Any; get_module::Function)
    @ REPL ~/.julia/juliaup/julia-1.11.1+0.x64.linux.gnu/share/julia/stdlib/v1.11/REPL/src/REPL.jl:327
 [16] run_repl(repl::REPL.AbstractREPL, consumer::Any; backend_on_current_task::Bool, backend::Any)
    @ REPL ~/.julia/juliaup/julia-1.11.1+0.x64.linux.gnu/share/julia/stdlib/v1.11/REPL/src/REPL.jl:483
 [17] run_repl(repl::REPL.AbstractREPL, consumer::Any)
    @ REPL ~/.julia/juliaup/julia-1.11.1+0.x64.linux.gnu/share/julia/stdlib/v1.11/REPL/src/REPL.jl:469
 [18] (::Base.var"#1139#1141"{Bool, Symbol, Bool})(REPL::Module)
    @ Base ./client.jl:446
 [19] #invokelatest#2
    @ ./essentials.jl:1055 [inlined]
 [20] invokelatest
    @ ./essentials.jl:1052 [inlined]
 [21] run_main_repl(interactive::Bool, quiet::Bool, banner::Symbol, history_file::Bool, color_set::Bool)
    @ Base ./client.jl:430
 [22] repl_main
    @ ./client.jl:567 [inlined]
 [23] _start()
    @ Base ./client.jl:541
Python stacktrace:
 [1] __contains__
   @ ~/.julia/packages/PythonCall/Nr75f/src/JlWrap/any.jl:274
 [2] prep_nccs
   @ dedalus.core.field ~/recalcfinke/.CondaPkg/env/lib/python3.11/site-packages/dedalus/core/field.py:374
 [3] _build_matrix_expressions
   @ dedalus.core.problems ~/recalcfinke/.CondaPkg/env/lib/python3.11/site-packages/dedalus/core/problems.py:331
 [4] add_equation
   @ dedalus.core.problems ~/recalcfinke/.CondaPkg/env/lib/python3.11/site-packages/dedalus/core/problems.py:92
Stacktrace:
 [1] pythrow()
   @ PythonCall.Core ~/.julia/packages/PythonCall/Nr75f/src/Core/err.jl:92
 [2] errcheck
   @ ~/.julia/packages/PythonCall/Nr75f/src/Core/err.jl:10 [inlined]
 [3] pycallargs(f::Py, args::Py)
   @ PythonCall.Core ~/.julia/packages/PythonCall/Nr75f/src/Core/builtins.jl:220
 [4] pycall(::Py, ::Py, ::Vararg{Py}; kwargs::@Kwargs{})
   @ PythonCall.Core ~/.julia/packages/PythonCall/Nr75f/src/Core/builtins.jl:243
 [5] pycall(::Py, ::Py, ::Vararg{Py})
   @ PythonCall.Core ~/.julia/packages/PythonCall/Nr75f/src/Core/builtins.jl:233
 [6] (::Py)(::Py, ::Vararg{Py}; kwargs::@Kwargs{})
   @ PythonCall.Core ~/.julia/packages/PythonCall/Nr75f/src/Core/Py.jl:357
 [7] top-level scope
   @ REPL[13]:1

The same works when using PyCall:

using PyCall
np = pyimport("numpy")
d3 = pyimport("dedalus.public")
coords = d3.CartesianCoordinates("x")
dist = d3.Distributor(coords, dtype=np.float64)
xbasis = d3.RealFourier(get(coords, "x"), size=16, bounds=(0,1))
B = dist.VectorField(coords, name="B", bases=(xbasis))
problem = d3.IVP([B])

problem.add_equation((d3.dt(B) - d3.Laplacian(B), 0))

Your system

  • Arch Linux
  • PythonCall v0.9.23, PyCall v1.96.4
versioninfo()
Julia Version 1.11.1
Commit 8f5b7ca12ad (2024-10-16 10:53 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 4 × Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz
  WORD_SIZE: 64
  LLVM: libLLVM-16.0.6 (ORCJIT, skylake)
Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)

Pkg.status()
Status `/tmp/jl_zARGID/Project.toml`
  [992eb4ea] CondaPkg v0.2.24
  [6099a3de] PythonCall v0.9.23

CondaPkg.status()
CondaPkg Status /tmp/jl_zARGID/CondaPkg.toml
Environment
  /tmp/jl_zARGID/.CondaPkg/env
Packages
  dedalus v3.0.3

Additional context
The MWE assumes that the python library dedalus is installed (using CondaPkg or Conda respectively).
Sorry for the rather large MWE, but I think that is the minimal sensible working setup of the project.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions