Expression Class
Hello. When attempting to import the https://fenicsproject.org/olddocs/dolfin/2016.2.0/python/programmers-reference/functions/expression/Expression.html , the error below can be shown. I've tried searching for the error message online, but have had no luck. I cannot also track down the log file. I believe (but cannot be sure) that it is a precompilation error in FEniCS, as the DOLFIN JIT compiler is being called with these commands. EDIT: I have been informed that the expression class is written in C++, so maybe it needs a different wrapper? Running these 3 lines of code should be enough to reproduce the error.
using PyCall
@pyimport fenics
test = fenics.Expression("A*sin(x[0]) + B*cos(x[1])")
LoadError: PyError (ccall(@pysym(:PyObject_Call), PyPtr, (PyPtr, PyPtr, PyPtr), o, arg, C_NULL)) <type 'exceptions.RuntimeError'> RuntimeError("In instant.recompile: The module did not compile with command 'cmake -DDEBUG=TRUE .', see '/home/ysimillides/.cache/instant/python2.7/error/dolfin_30bdf4cb51714b187b95e13cb07aeaf2529b443b/compile.log'",) File "/home/ysimillides/.julia/v0.6/Conda/deps/usr/lib/python2.7/site-packages/dolfin/functions/expression.py", line 679, in new mpi_comm=kwargs.get("mpi_comm")) File "/home/ysimillides/.julia/v0.6/Conda/deps/usr/lib/python2.7/site-packages/dolfin/compilemodules/expressions.py", line 266, in compile_expressions mpi_comm=mpi_comm) File "/home/ysimillides/.julia/v0.6/Conda/deps/usr/lib/python2.7/site-packages/dolfin/compilemodules/expressions.py", line 183, in compile_expression_code mpi_comm=mpi_comm) File "/home/ysimillides/.julia/v0.6/Conda/deps/usr/lib/python2.7/site-packages/dolfin/compilemodules/jit.py", line 70, in mpi_jit return local_jit(*args, **kwargs) File "/home/ysimillides/.julia/v0.6/Conda/deps/usr/lib/python2.7/site-packages/dolfin/compilemodules/compilemodule.py", line 603, in compile_extension_module **instant_kwargs) File "/home/ysimillides/.julia/v0.6/Conda/deps/usr/lib/python2.7/site-packages/instant/build.py", line 577, in build_module build_system) File "/home/ysimillides/.julia/v0.6/Conda/deps/usr/lib/python2.7/site-packages/instant/build.py", line 158, in recompile instant_error(msg % (cmd, compile_log_filename_dest)) File "/home/ysimillides/.julia/v0.6/Conda/deps/usr/lib/python2.7/site-packages/instant/output.py", line 96, in instant_error raise RuntimeError(text) while loading /home/ysimillides/FEniCS.jl/src/jfem.jl, in expression starting on line 40 pyerr_check at exception.jl:56 [inlined] pyerr_check at exception.jl:61 [inlined] macro expansion at exception.jl:81 [inlined] #_pycall#66(::Array{Any,1}, ::Function, ::PyCall.PyObject, ::String, ::Vararg{String,N} where N) at PyCall.jl:620 _pycall(::PyCall.PyObject, ::String, ::Vararg{String,N} where N) at PyCall.jl:608 #pycall#70(::Array{Any,1}, ::Function, ::PyCall.PyObject, ::Type{PyCall.PyAny}, ::String, ::Vararg{String,N} where N) at PyCall.jl:642 pycall(::PyCall.PyObject, ::Type{PyCall.PyAny}, ::String, ::Vararg{String,N} where N) at PyCall.jl:642 #call#71(::Array{Any,1}, ::PyCall.PyObject, ::String, ::Vararg{String,N} where N) at PyCall.jl:645 FEniCS.Expression(::String) at jfem.jl:24 include_string(::String, ::String) at loading.jl:515 include_string(::Module, ::String, ::String) at Compat.jl:1492 (::Atom.##55#58{String,String})() at eval.jl:73 withpath(::Atom.##55#58{String,String}, ::String) at utils.jl:30 withpath(::Function, ::String) at eval.jl:38 macro expansion at eval.jl:71 [inlined] (::Atom.##54#57{Dict{String,Any}})() at task.jl:80
Hi, you need to specify what the values for A, B are and depending on the FEniCS version you are using degree argument might be necessary as well. The following works for me (FEniCS 2017.1.0, PyCall 1.13.0 and Julia 0.6)
test = fenics.Expression("A*sin(x[0]) + B*cos(x[1])", A=1.0, B=2.0, degree=1)
@assert test(0, 0) == 2.0
I'm afraid I still get the same error (with the updated Expression). How did you install your FEniCS? Via Conda or another way?
I am using an ubuntu package. The entire script is as follows
using PyCall
unshift!(PyVector(pyimport("sys")["path"]), "/usr/lib/python2.7/dist-packages/")
@pyimport fenics
test = fenics.Expression("A*sin(x[0]) + B*cos(x[1])", A=1., B=2.0, degree=1)
@assert test(0., 0,) == 2.0
println(test(1, 2.))
Make sure that instant can compile the expression by trying it first in dolfin. This was not the case with your original example. Btw, instant gave you a log where you would find the reason for failure,
RuntimeError("In instant.recompile: The module did not compile with command 'cmake -DDEBUG=TRUE .', see '/home/ysimillides/.cache/instant/python2.7/error/dolfin_30bdf4cb51714b187b95e13cb07aeaf2529b443b/compile.log'",)
See what happend e.g. by
cat /home/ysimillides/.cache/instant/python2.7/error/dolfin_30bdf4cb51714b187b95e13cb07aeaf2529b443b/compile.log
CMake Error at CMakeLists.txt:12 (FIND_PACKAGE):
By not providing "FindDOLFIN.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "DOLFIN", but
CMake did not find one.
Could not find a package configuration file provided by "DOLFIN" with any
of the following names:
DOLFINConfig.cmake
dolfin-config.cmake
Add the installation prefix of "DOLFIN" to CMAKE_PREFIX_PATH or set
"DOLFIN_DIR" to a directory containing one of the above files. If "DOLFIN"
provides a separate development package or SDK, be sure it has been
installed.
is from the log file. @ysimillides do you have cmake installed?