RFC for ergonomically passing Python variables to Julia
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 25/100
Direção de pesquisa
Comece revisando as duas APIs propostas, teval e let, juntamente com a discussão vinculada no Julia Discourse. Para considerar a tarefa concluída, seria necessário chegar a um acordo sobre uma abordagem ergonômica para passar variáveis Python para Julia e definir um escopo concreto de implementação.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
I propose one of the following two APIs as a way to more ergonomically pass Python variables to Julia code:
jl.teval("const MY_CONST = $(x)", x=my_python_const)
a "template" eval, or
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:
jl.seval("x -> @eval const MY_CONST = $x")(my_python_const)
While Python's PEP 750 proposes Template Strings which could offer one solution:
jl.seval(t"const MY_CONST = {my_python_const}")
We could implement something similar with a new teval method:
jl.teval("const MY_CONST = {my_python_const}")
However, this has two key issues:
- 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! tevalwouldn't have access to local variables to referencemy_python_const
Let's look at the two proposed approaches in more detail:
The first approach makes variable passing explicit but ergonomic:
jl.teval("const MY_CONST = $(x)", x=my_python_const)
The second approach uses a context manager for temporary variable binding:
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
- Linguagem predominante
- Julia
- Estrelas
- 1.1k
- Forks
- 89
- Merge médio
- 2d 15h
- PRs com merge (30d)
- 7
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de JuliaPy/PythonCall.jl
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
JuliaPy/PythonCall.jl#828 · 7 comentários ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
JuliaPy/PythonCall.jl#809 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
-
Locking julia dependenciesAbertaenhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
JuliaPy/PythonCall.jl#805 · 4 comentários ·
Mantenedores costumam responder em até 1 dia
-
enhancement
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 68/100
JuliaPy/PythonCall.jl#796 ·
Mantenedores costumam responder em até 1 dia
-
enhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
JuliaPy/PythonCall.jl#790 ·
Mantenedores costumam responder em até 1 dia
Todas as issues de JuliaPy/PythonCall.jl
Issues semelhantes
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 84/100
SciML/Catalyst.jl#1571 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
SciML/Optimization.jl#1414 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
SciML/OrdinaryDiffEq.jl#4831 ·
Mantenedores costumam responder em até 1 dia