Missed the list... On Fri, Aug 1, 2014 at 2:11 PM, Martin Sandve Alnæs <[email protected]> wrote:
> Great, adding "dolfin.cpp." to the imports in the swig file generation > worked fine. But the new and better import doesn't work: > > > /home/martinal/opt/fenics/dorsal-unstable-py3/lib/python3.4/site-packages/dolfin/cpp/la.py > in <module>() > 110 has_petsc4py = _la.has_petsc4py > 111 import dolfin.cpp.common > --> 112 class LinearAlgebraObject(dolfin.cpp.common.Variable): > 113 """ > 114 This is a common base class for all DOLFIN linear algebra > > AttributeError: 'module' object has no attribute 'cpp' > :( probably because the cpp module has not been properly imported at the time of call... > However if we manually edit 'import common' to becom 'from . import > common' etc. in cpp/*.py, we get further. > That is not sustainable... I read the SWIg docs and you might want to add -relativeimport to the SWIG commandline options. This should be done in cmake/scripts/codesnippets.py as CMakeLists.txt files are autogenerated. Not sure it will generate code that would work for us though... See: http://www.swig.org/Doc3.0/SWIGDocumentation.html#Python_absrelimports for further comments. Johan > Martin > > > > On 1 August 2014 13:46, Johan Hake <[email protected]> wrote: > >> On Fri, Aug 1, 2014 at 1:35 PM, Martin Sandve Alnæs <[email protected]> >> wrote: >> >>> It doesn't make sense that _swig_property() triggers >>> Parameters.__setitem__ so something fishy is going on. >>> >>> If we disable this line in common.py the error disappears: >>> #parameters = _common.get_global_parameters() >>> >> >> Probably not a solution, see below. >> >> >>> Then we get to this error instead: >>> >>> >>> /home/martinal/opt/fenics/dorsal-unstable-py3/lib/python3.4/site-packages/dolfin/cpp/la.py >>> in <module>() >>> 109 return _la.has_petsc4py() >>> 110 has_petsc4py = _la.has_petsc4py >>> --> 111 import common >>> 112 class LinearAlgebraObject(common.Variable): >>> 113 """ >>> >>> ImportError: No module named 'common' >>> >>> >>> This is because relative imports are gone from python 3, we need 'import >>> dolfin.cpp.common'. However I cannot find any 'import common' in any .py or >>> .i files in dolfin. Where does this come from? >>> >> >> These are added by swig from the import statements in the generated >> module.i files: >> >> %import(module="common") "dolfin/parameter/Parameter.h" >> >> Here we state that types from Parameters.h should be imported and that >> the types resides in the local common module. We can change that line to: >> >> %import(module="dolfin.cpp.common") "dolfin/parameter/Parameter.h" >> >> These lines are generated at line 85 in dolfin_utils/cppparser/utils.py. >> Try add "dolfin.cpp." before the %s (or the py3 equivalent format string) >> at that line. >> >> The reason the typemaps does not kick in for the globalparameter line >> above is probably because the import does not work. >> >> Johan >> >> >> >>> >>> Martin >>> >>> >>> >>> >>> >>> On 1 August 2014 12:18, Johan Hake <[email protected]> wrote: >>> >>>> It looks like line 2473 triggers a call to __setitem__, which is >>>> strange in it self as it was not done in py2. That call goes into our swig >>>> extended python code which calls _get_parameter_keys. That call triggers a >>>> type miss-match for its self argument. This occurs for example when a class >>>> that are shared pointer stored is not properly marked as being a shared_ptr >>>> class. I see that dolfin::Parameters is indeed marked as being shared ptr >>>> stored, so it might be something else. >>>> >>>> You can try adding some print statements for self inside the >>>> __getitem__ method in dolfin/swig/parameters/post.i before calling >>>> _get_parameter_keys(). >>>> >>>> If you want me to check this out, can you please write a simple recipe >>>> for installing py3 alongside py2, I am on vacation and in particular I am >>>> in vacation-not-thinking-mode... >>>> >>>> Johan >>>> >>>> >>>> On Fri, Aug 1, 2014 at 10:45 AM, Martin Sandve Alnæs < >>>> [email protected]> wrote: >>>> >>>>> Note that you need the next branches of instant, fiat, ffc and master >>>>> branch of ufl to test Aslaks dolfin branch. >>>>> >>>>> I don't understand what's happening here, this is swig-generated code >>>>> which fails to match the python Parameters object with the C++ Parameters >>>>> type. >>>>> >>>>> Martin >>>>> >>>>> >>>>> On 1 August 2014 10:24, Aslak Bergersen <[email protected]> >>>>> wrote: >>>>> >>>>>> I'm trying to get dolfin to run with python 3. Previously this summer >>>>>> I have changed ffc, fiat, instant and ufl, which are now included in the >>>>>> master/next branches. >>>>>> >>>>>> Dolfin now builds for python 2 and 3, but for python 3 it fails to >>>>>> import from dolfin. You can find my code her: >>>>>> https://bitbucket.org/aslakbergersen/dolfin/branch/aslakbergersen/topic-prepare-py3 >>>>>> >>>>>> ''' >>>>>> Traceback (most recent call last): >>>>>> File "errorcontrol.py", line 26, in <module> >>>>>> from dolfin import * >>>>>> File >>>>>> "/home/aslak/Work/FEniCS/install_dir_py3/lib/python3.2/site-packages/dolfin/__init__.py", >>>>>> line 16, in <module> >>>>>> from . import cpp >>>>>> File >>>>>> "/home/aslak/Work/FEniCS/install_dir_py3/lib/python3.2/site-packages/dolfin/cpp/__init__.py", >>>>>> line 42, in <module> >>>>>> exec("from . import %s" % module_name) >>>>>> File "<string>", line 1, in <module> >>>>>> File >>>>>> "/home/aslak/Work/FEniCS/install_dir_py3/lib/python3.2/site-packages/dolfin/cpp/common.py", >>>>>> line 2458, in <module> >>>>>> class Event(object): >>>>>> File >>>>>> "/home/aslak/Work/FEniCS/install_dir_py3/lib/python3.2/site-packages/dolfin/cpp/common.py", >>>>>> line 2473, in Event >>>>>> thisown = _swig_property(lambda x: x.this.own(), lambda x, v: >>>>>> x.this.own(v), doc='The membership flag') >>>>>> File >>>>>> "/home/aslak/Work/FEniCS/install_dir_py3/lib/python3.2/site-packages/dolfin/cpp/common.py", >>>>>> line 2093, in __setitem__ >>>>>> if key not in self._get_parameter_keys(): >>>>>> TypeError: in method 'Parameters__get_parameter_keys', argument 1 of >>>>>> type 'dolfin::Parameters const * >>>>>> ''' >>>>>> >>>>>> There seems to be an error whith swig and the new C API for python. >>>>>> I'm using python 3.2 and swig 3.0.2. Does anyone have experience with >>>>>> this >>>>>> type of error? >>>>>> >>>>>> -- >>>>>> Mvh >>>>>> Aslak Bergersen >>>>>> 993 22 848 >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> fenics mailing list >>>>>> [email protected] >>>>>> http://fenicsproject.org/mailman/listinfo/fenics >>>>>> >>>>>> >>>>> >>>>> _______________________________________________ >>>>> fenics mailing list >>>>> [email protected] >>>>> http://fenicsproject.org/mailman/listinfo/fenics >>>>> >>>>> >>>> >>> >> >
_______________________________________________ fenics mailing list [email protected] http://fenicsproject.org/mailman/listinfo/fenics
