Menu

Running Python interop on Linux fails: "Attempted to access a missing member"

rterrett
2021-12-30
2022-01-16
  • rterrett

    rterrett - 2021-12-30

    Hi,

    I am attempting to use the Python interop capabilities in DWSIM on Linux. I have followed danwbr's advice elsewhere regarding known working OS/DWSIM version combinations.

    DWSIM version: 7.1.2 (the Ubuntu .deb)
    OS: Ubuntu 20.04.2 x86_64
    Python: 3.8.10
    PYTHONPATH: '/usr/lib/python38.zip:/usr/lib/python3.8:/usr/lib/python3.8/lib-dynload:/home/rterrett/.local/lib/python3.8/site-packages:/usr/local/lib/python3.8/dist-packages:/usr/lib/python3/dist-packages'

    (here I just copied the contents of sys.path. I had previously passed less expansive PYTHONPATHs to DWSIM but encountered import errors, so I just threw everything at it.)

    PYTHONNET_PYDLL: '/usr/lib/python3.8/config-3.8-x86_64-linux-gnu/libpython3.8.so'
    DWSIM Python interpreter: Python.NET

    I have Cantera installed from the relevant Ubuntu PPA.

    This seems to have obtained the most progress so far, however when I try to run a flowsheet with a Python unit operation (e.g. any of the Cantera interop examples) I get the following in the console:

    [30/12/2021 3:57:59 PM] Errors occurred during the calculation of the flowsheet, please read the following messages for more details.
    [30/12/2021 3:57:59 PM] Attempted to access a missing member.
    at Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet (System.Object o, System.Type objType, System.String name, System.Object[] args, System.String[] paramnames, System.Boolean[] CopyBack) [0x000bb] in <4db44276fe2442e2b0c7756aa8b4da57>:0
    at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet (System.Object Instance, System.Type Type, System.String MemberName, System.Object[] Arguments, System.String[] ArgumentNames, System.Type[] TypeArguments, System.Boolean[] CopyBack) [0x00001] in <4db44276fe2442e2b0c7756aa8b4da57>:0
    at DWSIM.UnitOperations.UnitOperations.CustomUO.Calculate (System.Object args) [0x00bbe] in <7ac97081153f4b1f90ffaf1c18224695>:0

    At this point I'm not sure if this is the result of a misconfiguration on my part, or is due to a bug in DWSIM. I can cut down the Python script to a trivial example (e.g. a = 1) and get the same error.

    Any help that the community can provide in diagnosing and/or resolving this issue is appreciated.

    Kind regards,
    -r

     
  • Daniel Medeiros

    Daniel Medeiros - 2021-12-30

    This is probably an issue with mono... try these commands so we can discover the code line where the error is being raised:

    cd /usr/local/lib/dwsim
    pdb2mdb DWSIM.UnitOperations.dll
    mono --debug DWSIM.UI.Desktop.exe
    

    then paste the error message here again.

    Regards
    Daniel

     

    Last edit: Daniel Medeiros 2021-12-30
  • rterrett

    rterrett - 2021-12-30

    Hi,

    Hopefully I'm doing this right. Attempted to run the Cantera interop example:

    [30/12/2021 11:38:40 PM] Attempted to access a missing member.
    at Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet (System.Object o, System.Type objType, System.String name, System.Object[] args, System.String[] paramnames, System.Boolean[] CopyBack) [0x000bb] in <4db44276fe2442e2b0c7756aa8b4da57>:0
    at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet (System.Object Instance, System.Type Type, System.String MemberName, System.Object[] Arguments, System.String[] ArgumentNames, System.Type[] TypeArguments, System.Boolean[] CopyBack) [0x00001] in <4db44276fe2442e2b0c7756aa8b4da57>:0
    at DWSIM.UnitOperations.UnitOperations.CustomUO.Calculate (System.Object args) [0x00bb8] in C:\Users\Daniel\source\repos\DanWBR\dwsim\DWSIM.UnitOperations\UnitOperations\PythonScriptUO.vb:347

    Thanks for your attention to this.

    Regards,
    -r

     
    • Daniel Medeiros

      Daniel Medeiros - 2021-12-30

      Yes you did:

      C:\Users\Daniel\source\repos\DanWBR\dwsim\DWSIM.UnitOperations\UnitOperations\PythonScriptUO.vb:347

       

      Last edit: Daniel Medeiros 2021-12-30
  • Daniel Medeiros

    Daniel Medeiros - 2021-12-30

    This will need a code change from my part. It will work in the next release.

    Thanks
    Daniel

     
    • rterrett

      rterrett - 2022-01-04

      Hi, thanks for checking this out.

      Regards,
      -r

       
  • rterrett

    rterrett - 2022-01-16

    Hi,

    I've tried DWSIM 7.2 and Python seems to work in the minimal case, in the Cantera Interop example (and other Cantera examples) I get the following:

    'numpy.float64' value cannot be converted to System.Double in method Void .ctor(Double)

    I was able to track this down to the casts in lines 83–88 of the Python unit operation in Cantera Interop.dwxmz, and I was able to solve this by casting the output variables to float, e.g.:

    oms1.Phases[0].Compounds['Methane'].MoleFraction = System.Nullable[System.Double](outCH4)

    to:

    oms1.Phases[0].Compounds['Methane'].MoleFraction = System.Nullable[System.Double](float(outCH4))

    I'm not sure if this is a problem with DWSIM, Python.NET, or Cantera/NumPy. At any rate the simulation runs fine with these changes, and so hopefully it will work with our production code (fingers crossed). However I thought you might like to know.

    Versions are:

    Numpy 1.22.1
    Cantera 2.6.0a4

    Both from PyPI

    Running on Python 3.8 on Ubuntu 20.04

    Thank you very much for your help, I really appreciate it.
    -r

     

    Last edit: rterrett 2022-01-16

Log in to post a comment.