Creating getters and setters for `ndarray` fields of structs
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Área
- api, backend-api-design
Línea de trabajo
Comienza reproduciendo el ejemplo de Rust con rust-numpy v0.22.0; después, lee las discusiones enlazadas 357 y 393 y compara la implementación de conversión de smallvec de PyO3. El trabajo estaría terminado cuando exista un enfoque documentado y acordado para exponer automáticamente los campos de las estructuras ndarray mediante getters y setters, incluido el comportamiento de conversión requerido.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I tried to write Python bindings for a struct containing ndarray type fields, but it does not compile: (rust-numpy v0.22.0)
use pyo3::prelude::*;
use pyo3::{pymodule, Bound, PyResult};
use numpy::ndarray::Array2;
#[pyclass(get_all, set_all)]
#[derive(Debug, Clone)]
pub struct Foo {
vec: Array2<f64>,
}
#[pymodule]
fn my_module(m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add_class::<Foo>()?;
Ok(())
}
I read the existing discussions (this and this) and they suggests writing getters and setters manually for each field, which is unsatisfactory.
This currently greatly limits the ability to make existing APIs that contain ndarrays available to Python: We can only use free functions but not structs or classmethods.
Why is this limitation ? Could it be solved by simply implementing the IntoPy<Py<PyAny>> and FromPyObject traits for ndarray ?
I see that this is done for smallvec's and having smallvec's as fields just works as expected.
Note also that this feature is present in C++'s pybind11 (the getters return a read-only array).
I would greatly appreciate the ability to bind ndarray fields and automatically provide getters and setters in Python. This would allow to fully bind an existing Rust API to Python.
Thanks a lot!
- Lenguaje dominante
- Rust
- Estrellas
- 1.4k
- Forks
- 141
- Merge medio
- 16 min
- PR fusionados (30 d)
- 3
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de PyO3/rust-numpy
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
PyO3/rust-numpy#565 · 1 comentario ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
PyO3/rust-numpy#563 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 56/100
PyO3/rust-numpy#557 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
PyO3/rust-numpy#547 · 2 comentarios ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 20/100
PyO3/rust-numpy#535 ·
Todos los issues de PyO3/rust-numpy
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
bug core
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
-
JIT-compiled number -> Decimal conversion silently overflows instead of raising DECIMAL_OVERFLOW Abiertofuzz
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
ClickHouse/ClickHouse#122114 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
linebender/vello_svg#90 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100