JuliaPy / JuliaPy/PythonCall.jl

RFC for ergonomically passing Python variables to Julia

Ouverte
#580 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
enhancement
Langage dominant
Julia
Étoiles
1.1k
Forks
86
Merge moyen
1 j 22 h
PR mergées (30 j)
3

Description

I propose one of the following two APIs as a way to more ergonomically pass Python variables to Julia code:

```python
jl.teval("const MY_CONST = $(x)", x=my_python_const)
```

a "template" eval, or

```python
with jl.let(x=my_python_const):
jl.seval("const MY_CONST = x")
```
which is a juliacall "let."

Would be interested in hearing other ideas too.

This is designed to address the following issue. Currently, passing Python objects to Julia via `seval` requires creating closure functions:

```python
jl.seval("x -> @eval const MY_CONST = $x")(my_python_const)
```

While Python's PEP 750 proposes [Template Strings](https://peps.python.org/pep-0750/) which could offer one solution:

```python
jl.seval(t"const MY_CONST = {my_python_const}")
```

We could implement something similar with a new `teval` method:

```python
jl.teval("const MY_CONST = {my_python_const}")
```

However, this has two key issues:

1. The `{}` syntax conflicts with Julia type signatures (e.g., `Vector{Float64}`), which could cause subtle bugs. Even if t-strings are eventually merged to Python, we would still face this issue!
2. `teval` wouldn't have access to local variables to reference `my_python_const`

Let's look at the two proposed approaches in more detail:

The first approach makes variable passing explicit but ergonomic:

```python
jl.teval("const MY_CONST = $(x)", x=my_python_const)
```

The second approach uses a context manager for temporary variable binding:

```python
with jl.let(x=my_python_const):
jl.seval("const MY_CONST = x") # Would access the bound value
```

Basically the `seval` would have access to this stack of Python objects passed via `let`, and put them into the Julia context via a Julia-evaluated `let` statement.

Thoughts? @cjdoris @mkitti

Going to post this on the Julia discourse too. Edit: https://discourse.julialang.org/t/rfc-for-ergonomically-passing-python-variables-to-julia/124266

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.