RFC for ergonomically passing Python variables to Julia
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
Hướng nghiên cứu
Bắt đầu bằng việc xem xét hai API được đề xuất, teval và let, cùng với cuộc thảo luận Julia Discourse được liên kết. Để được xem là hoàn tất, cần thống nhất một phương án thuận tiện về mặt thao tác để truyền các biến Python vào Julia và xác định phạm vi triển khai cụ thể.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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
- Ngôn ngữ chính
- Julia
- Star
- 1.1k
- Fork
- 89
- Merge trung bình
- 2 ngày 15 giờ
- Pull request đã merge (30 ngày)
- 7
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của JuliaPy/PythonCall.jl
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 55/100
JuliaPy/PythonCall.jl#828 · 7 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
JuliaPy/PythonCall.jl#809 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Locking julia dependenciesĐang mởenhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
JuliaPy/PythonCall.jl#805 · 4 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 68/100
JuliaPy/PythonCall.jl#796 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
JuliaPy/PythonCall.jl#790 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của JuliaPy/PythonCall.jl
Issue tương tự
-
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 84/100
SciML/Catalyst.jl#1571 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
SciML/Optimization.jl#1414 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
SciML/OrdinaryDiffEq.jl#4831 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
SciML/ModelingToolkitStandardLibrary.jl#529 ·
Maintainer thường phản hồi trong vòng 1 ngày