Skip to content

Commit

Permalink
update to pyo3 0.23.0 (apache#6745)
Browse files Browse the repository at this point in the history
  • Loading branch information
psvri authored and alamb committed Dec 2, 2024
1 parent dfc29f8 commit eae176c
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 17 deletions.
2 changes: 1 addition & 1 deletion arrow-pyarrow-integration-testing/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,4 @@ crate-type = ["cdylib"]

[dependencies]
arrow = { path = "../arrow", features = ["pyarrow"] }
pyo3 = { version = "0.22", features = ["extension-module"] }
pyo3 = { version = "0.23", features = ["extension-module"] }
2 changes: 1 addition & 1 deletion arrow-pyarrow-integration-testing/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ fn to_py_err(err: ArrowError) -> PyErr {
#[pyfunction]
fn double(array: &Bound<PyAny>, py: Python) -> PyResult<PyObject> {
// import
let array = make_array(ArrayData::from_pyarrow_bound(&array)?);
let array = make_array(ArrayData::from_pyarrow_bound(array)?);

// perform some operation
let array = array
Expand Down
2 changes: 1 addition & 1 deletion arrow/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ arrow-select = { workspace = true }
arrow-string = { workspace = true }

rand = { version = "0.8", default-features = false, features = ["std", "std_rng"], optional = true }
pyo3 = { version = "0.22.2", default-features = false, optional = true }
pyo3 = { version = "0.23", default-features = false, optional = true }

chrono = { workspace = true, optional = true }

Expand Down
34 changes: 20 additions & 14 deletions arrow/src/pyarrow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ impl<T: ToPyArrow> IntoPyArrow for T {
}

fn validate_class(expected: &str, value: &Bound<PyAny>) -> PyResult<()> {
let pyarrow = PyModule::import_bound(value.py(), "pyarrow")?;
let pyarrow = PyModule::import(value.py(), "pyarrow")?;
let class = pyarrow.getattr(expected)?;
if !value.is_instance(&class)? {
let expected_module = class.getattr("__module__")?.extract::<PyBackedStr>()?;
Expand Down Expand Up @@ -177,7 +177,7 @@ impl ToPyArrow for DataType {
fn to_pyarrow(&self, py: Python) -> PyResult<PyObject> {
let c_schema = FFI_ArrowSchema::try_from(self).map_err(to_py_err)?;
let c_schema_ptr = &c_schema as *const FFI_ArrowSchema;
let module = py.import_bound("pyarrow")?;
let module = py.import("pyarrow")?;
let class = module.getattr("DataType")?;
let dtype = class.call_method1("_import_from_c", (c_schema_ptr as Py_uintptr_t,))?;
Ok(dtype.into())
Expand Down Expand Up @@ -213,7 +213,7 @@ impl ToPyArrow for Field {
fn to_pyarrow(&self, py: Python) -> PyResult<PyObject> {
let c_schema = FFI_ArrowSchema::try_from(self).map_err(to_py_err)?;
let c_schema_ptr = &c_schema as *const FFI_ArrowSchema;
let module = py.import_bound("pyarrow")?;
let module = py.import("pyarrow")?;
let class = module.getattr("Field")?;
let dtype = class.call_method1("_import_from_c", (c_schema_ptr as Py_uintptr_t,))?;
Ok(dtype.into())
Expand Down Expand Up @@ -249,7 +249,7 @@ impl ToPyArrow for Schema {
fn to_pyarrow(&self, py: Python) -> PyResult<PyObject> {
let c_schema = FFI_ArrowSchema::try_from(self).map_err(to_py_err)?;
let c_schema_ptr = &c_schema as *const FFI_ArrowSchema;
let module = py.import_bound("pyarrow")?;
let module = py.import("pyarrow")?;
let class = module.getattr("Schema")?;
let schema = class.call_method1("_import_from_c", (c_schema_ptr as Py_uintptr_t,))?;
Ok(schema.into())
Expand Down Expand Up @@ -309,7 +309,7 @@ impl ToPyArrow for ArrayData {
let array = FFI_ArrowArray::new(self);
let schema = FFI_ArrowSchema::try_from(self.data_type()).map_err(to_py_err)?;

let module = py.import_bound("pyarrow")?;
let module = py.import("pyarrow")?;
let class = module.getattr("Array")?;
let array = class.call_method1(
"_import_from_c",
Expand All @@ -318,7 +318,7 @@ impl ToPyArrow for ArrayData {
addr_of!(schema) as Py_uintptr_t,
),
)?;
Ok(array.to_object(py))
Ok(array.unbind())
}
}

Expand All @@ -335,7 +335,7 @@ impl<T: ToPyArrow> ToPyArrow for Vec<T> {
.iter()
.map(|v| v.to_pyarrow(py))
.collect::<PyResult<Vec<_>>>()?;
Ok(values.to_object(py))
Ok(PyList::new(py, values)?.unbind().into())
}
}

Expand Down Expand Up @@ -451,7 +451,7 @@ impl FromPyArrow for ArrowArrayStreamReader {
// make the conversion through PyArrow's private API
// this changes the pointer's memory and is thus unsafe.
// In particular, `_export_to_c` can go out of bounds
let args = PyTuple::new_bound(value.py(), [stream_ptr as Py_uintptr_t]);
let args = PyTuple::new(value.py(), [stream_ptr as Py_uintptr_t])?;
value.call_method1("_export_to_c", args)?;

let stream_reader = ArrowArrayStreamReader::try_new(stream)
Expand All @@ -469,9 +469,9 @@ impl IntoPyArrow for Box<dyn RecordBatchReader + Send> {
let mut stream = FFI_ArrowArrayStream::new(self);

let stream_ptr = (&mut stream) as *mut FFI_ArrowArrayStream;
let module = py.import_bound("pyarrow")?;
let module = py.import("pyarrow")?;
let class = module.getattr("RecordBatchReader")?;
let args = PyTuple::new_bound(py, [stream_ptr as Py_uintptr_t]);
let args = PyTuple::new(py, [stream_ptr as Py_uintptr_t])?;
let reader = class.call_method1("_import_from_c", args)?;

Ok(PyObject::from(reader))
Expand Down Expand Up @@ -500,11 +500,17 @@ impl<'source, T: FromPyArrow> FromPyObject<'source> for PyArrowType<T> {
}
}

impl<T: IntoPyArrow> IntoPy<PyObject> for PyArrowType<T> {
fn into_py(self, py: Python) -> PyObject {
impl<'py, T: IntoPyArrow> IntoPyObject<'py> for PyArrowType<T> {
type Target = PyAny;

type Output = Bound<'py, Self::Target>;

type Error = PyErr;

fn into_pyobject(self, py: Python<'py>) -> Result<Self::Output, PyErr> {
match self.0.into_pyarrow(py) {
Ok(obj) => obj,
Err(err) => err.to_object(py),
Ok(obj) => Result::Ok(obj.into_bound(py)),
Err(err) => Result::Err(err),
}
}
}
Expand Down

0 comments on commit eae176c

Please sign in to comment.