I should note that if you need to pass python objects to julia, you can use PyCall as well on the Julia side to manipulate them.
Best, Jake On Monday, January 13, 2014 12:37:46 PM UTC-5, Jake Bolewski wrote: > > There is a start of a Python -> Julia interface contained in IJulia. I > was playing around with making importing julia functions more idiomatic > here https://github.com/jakebolewski/pyjulia. Its a bit of a hack at the > moment but it enables you to do things like: > > julia: > module Test > function foo(x::Integer) > return x^2 > end > end > > python: > from julia.Test import foo > foo(10) # => 100 > > or > from julia import Test as jtest > jtest.foo(10) # => 100 > > It uses PyCall under the hood. The julia object won't be gc'd as long as > you hold a reference to it on the Python side. > > I'm waiting on > https://github.com/JuliaLang/julia/pull/4997<https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2FJuliaLang%2Fjulia%2Fpull%2F4997&sa=D&sntz=1&usg=AFQjCNEecsvLAsFmkFeDlCOuefg6x7M2ww> > to > be merged before working on this further, as it addresses most > of the roadblock's I encountered when working on this. I don't know how > sophisticated you're interop needs to be put if you only need to pass > simple data-structures (array's, list's, dict's) to a julia function, > *interop* already works well with PyCall without delving into the c-api. > > Best, > Jake > > > > On Monday, January 13, 2014 11:09:35 AM UTC-5, Alexey Radul wrote: >> >> Hi all, >> >> I'm on a team that has a Python/C++ hybrid application -- Python >> frontend calling into a C++ backend. In what I imagine to be a common >> use case for Julia, we are experimenting with rewriting the C++ >> backend in Julia; but while the rewrite itself went well, we're having >> trouble getting the Python frontend to call the draft Julia backend. >> Where by "having trouble" I mean nothing we've tried worked. Has >> anyone on this list successfully does this? How? >> >> Here is the context, the set of things we looked at, and what >> happened. >> >> Context: >> - Everything is on Ubuntu 12.04 >> - We have both 32-bit and 64-bit machines, but most experimentation >> has been on 32-bit machines >> - We are building dev Julia from source (pulled around two days ago) >> >> Attempts: >> >> 1) We looked briefly at using PyCall, but all the documentation >> describes calling Python from Julia, so we haven't tried it. We would >> love to know if someone has had success calling Julia from Python with >> PyCall. >> >> 2) The Embedding Julia [1] page looked promising. It describes >> calling Julia from C, but since we already had a link from our Python >> frontend to our C++ backend via Boost::Python, we decided to try it. >> - At first, it completely didn't work. So, after grovelling the >> Internet for a while, we figured that the best thing to do was to >> fork Julia and merge https://github.com/JuliaLang/julia/pull/4997 in >> our fork. >> - Ultimately, the embedding.c example mentioned on said Embedding >> Julia page built and ran successfully, but our attempts to get the >> same code to run in our context failed with mysterious segfaults. [2] >> Our best guess is that the problem is that julia.h is actually a C >> header file, and attempting to include it form a C++ header file is >> producing disasters; but I, at least, do not have the chops to have >> already worked around that. >> Has anybody successfully called Julia from Python via a C++ shim and >> Boost::Python? What do you have to do for that to work? >> >> 3) I imagine it's possible to use one of the ways to call C (as >> opposed to C++) from Python, and then call Julia from C, but that >> seemed even more complicated, so we haven't tried it. Any success on >> this path? >> >> 4) Said Python frontend is only ~4K line of code, plus ~3K lines of >> tests; the main libraries it uses are a parsing library and HTTP >> (client and server). Would it be simpler to just rewrite it in >> Julia as well? >> >> Constraints we have (in case any of these are difficult): >> - We would like to maintain a long-lived Julia object, keep it from >> being garbage-collected, and repeatedly call from Python various >> Julia functions that operate on it. >> - We would like to pass structured data across those calls in both >> directions (e.g., nested lists and dicts on the Python side; but we >> can write custom code to build up and destructure corresponding >> Julia data). >> - We don't actually need to pass callbacks in either direction. >> >> Thank you in advance for your help, >> ~Alexey Radul >> >> [1] http://docs.julialang.org/en/latest/manual/embedding/ >> >> [2] GDB said something like >> (gdb) print jl_unbox_float64(fl_box_float64(2.0)) >> #1 1563740 >> (gdb) print jl_unbox_float64(fl_box_float64(2.0)) >> #2 1563780 >> Sorry, I don't have the actual number, but it was a large and changing >> integer instead of the 2 I expected. >> >>
