Skip to content

Commit da6bf5b

Browse files
authored
replace c_str! macro with c-string literals (#569)
1 parent f74c047 commit da6bf5b

12 files changed

Lines changed: 99 additions & 125 deletions

File tree

‎README.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ mod rust_ext {
8585

8686
### Execute a Python program from Rust and get results
8787

88-
``` toml
88+
```toml
8989
[package]
9090
name = "numpy-test"
9191

@@ -96,15 +96,15 @@ numpy = "0.29"
9696

9797
```rust
9898
use numpy::{PyArray1, PyArrayMethods};
99-
use pyo3::{types::{IntoPyDict, PyAnyMethods}, PyResult, Python, ffi::c_str};
99+
use pyo3::{types::{IntoPyDict, PyAnyMethods}, PyResult, Python};
100100

101101
fn main() -> PyResult<()> {
102102
Python::attach(|py| {
103103
let np = py.import("numpy")?;
104104
let locals = [("np", np)].into_py_dict(py)?;
105105

106106
let pyarray = py
107-
.eval(c_str!("np.absolute(np.array([-1, -2, -3], dtype='int32'))"), Some(&locals), None)?
107+
.eval(c"np.absolute(np.array([-1, -2, -3], dtype='int32'))", Some(&locals), None)?
108108
.cast_into::<PyArray1<i32>>()?;
109109

110110
let readonly = pyarray.readonly();

‎benches/array_like.rs‎

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use std::hint::black_box;
33
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion, Throughput};
44
use numpy::{PyArrayLike1, PyArrayLike2, PyArrayLike3};
55
use pyo3::{
6-
ffi::c_str,
76
types::{PyAnyMethods, PyDict},
87
Python,
98
};
@@ -18,11 +17,7 @@ fn extract_array_like_1(c: &mut Criterion) {
1817
locals.set_item("size", size).unwrap();
1918

2019
let list = py
21-
.eval(
22-
c_str!("[float(i) for i in range(size)]"),
23-
Some(&locals),
24-
None,
25-
)
20+
.eval(c"[float(i) for i in range(size)]", Some(&locals), None)
2621
.unwrap();
2722

2823
group.throughput(Throughput::Elements(size as u64));
@@ -48,7 +43,7 @@ fn extract_array_like_2(c: &mut Criterion) {
4843

4944
let list = py
5045
.eval(
51-
c_str!("[[float(i + j) for i in range(size)] for j in range(size)]"),
46+
c"[[float(i + j) for i in range(size)] for j in range(size)]",
5247
Some(&locals),
5348
None,
5449
)
@@ -77,7 +72,7 @@ fn extract_array_like_3(c: &mut Criterion) {
7772

7873
let list = py
7974
.eval(
80-
c_str!("[[[float(i + j + k) for i in range(size)] for j in range(size)] for k in range(size)]"),
75+
c"[[[float(i + j + k) for i in range(size)] for j in range(size)] for k in range(size)]",
8176
Some(&locals),
8277
None,
8378
)

‎src/array.rs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -953,12 +953,12 @@ pub trait PyArrayMethods<'py, T, D>: PyUntypedArrayMethods<'py> + Sized {
953953
///
954954
/// ```
955955
/// use numpy::{PyArray2, PyArrayMethods};
956-
/// use pyo3::{Python, types::PyAnyMethods, ffi::c_str};
956+
/// use pyo3::{Python, types::PyAnyMethods};
957957
///
958958
/// # fn main() -> pyo3::PyResult<()> {
959959
/// Python::attach(|py| {
960960
/// let pyarray= py
961-
/// .eval(c_str!("__import__('numpy').array([[0, 1], [2, 3]], dtype='int64')"), None, None)?
961+
/// .eval(c"__import__('numpy').array([[0, 1], [2, 3]], dtype='int64')", None, None)?
962962
/// .cast_into::<PyArray2<i64>>()?;
963963
///
964964
/// assert_eq!(pyarray.to_vec()?, vec![0, 1, 2, 3]);

‎src/borrow/mod.rs‎

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,17 +63,17 @@
6363
//!
6464
//! ```rust
6565
//! use numpy::{PyArray1, PyArrayMethods};
66-
//! use pyo3::{types::{IntoPyDict, PyAnyMethods}, Python, ffi::c_str};
66+
//! use pyo3::{types::{IntoPyDict, PyAnyMethods}, Python};
6767
//!
6868
//! # fn main() -> pyo3::PyResult<()> {
6969
//! Python::attach(|py| {
7070
//! let array = PyArray1::arange(py, 0.0, 10.0, 1.0);
7171
//! let locals = [("array", array)].into_py_dict(py)?;
7272
//!
73-
//! let view1 = py.eval(c_str!("array[:5]"), None, Some(&locals))?.cast_into::<PyArray1<f64>>()?;
74-
//! let view2 = py.eval(c_str!("array[5:]"), None, Some(&locals))?.cast_into::<PyArray1<f64>>()?;
75-
//! let view3 = py.eval(c_str!("array[::2]"), None, Some(&locals))?.cast_into::<PyArray1<f64>>()?;
76-
//! let view4 = py.eval(c_str!("array[1::2]"), None, Some(&locals))?.cast_into::<PyArray1<f64>>()?;
73+
//! let view1 = py.eval(c"array[:5]", None, Some(&locals))?.cast_into::<PyArray1<f64>>()?;
74+
//! let view2 = py.eval(c"array[5:]", None, Some(&locals))?.cast_into::<PyArray1<f64>>()?;
75+
//! let view3 = py.eval(c"array[::2]", None, Some(&locals))?.cast_into::<PyArray1<f64>>()?;
76+
//! let view4 = py.eval(c"array[1::2]", None, Some(&locals))?.cast_into::<PyArray1<f64>>()?;
7777
//!
7878
//! {
7979
//! let _view1 = view1.readwrite();
@@ -95,15 +95,15 @@
9595
//! # use std::panic::{catch_unwind, AssertUnwindSafe};
9696
//! #
9797
//! use numpy::{PyArray2, PyArrayMethods};
98-
//! use pyo3::{types::{IntoPyDict, PyAnyMethods}, Python, ffi::c_str};
98+
//! use pyo3::{types::{IntoPyDict, PyAnyMethods}, Python};
9999
//!
100100
//! # fn main() -> pyo3::PyResult<()> {
101101
//! Python::attach(|py| {
102102
//! let array = PyArray2::<f64>::zeros(py, (10, 10), false);
103103
//! let locals = [("array", array)].into_py_dict(py)?;
104104
//!
105-
//! let view1 = py.eval(c_str!("array[:, ::3]"), None, Some(&locals))?.cast_into::<PyArray2<f64>>()?;
106-
//! let view2 = py.eval(c_str!("array[:, 1::3]"), None, Some(&locals))?.cast_into::<PyArray2<f64>>()?;
105+
//! let view1 = py.eval(c"array[:, ::3]", None, Some(&locals))?.cast_into::<PyArray2<f64>>()?;
106+
//! let view2 = py.eval(c"array[:, 1::3]", None, Some(&locals))?.cast_into::<PyArray2<f64>>()?;
107107
//!
108108
//! // A false conflict as the views do not actually share any elements.
109109
//! let res = catch_unwind(AssertUnwindSafe(|| {
@@ -300,7 +300,7 @@ where
300300
///
301301
/// ```rust
302302
/// # use pyo3::prelude::*;
303-
/// use pyo3::{py_run, ffi::c_str};
303+
/// use pyo3::py_run;
304304
/// use numpy::{get_array_module, PyReadonlyArray2};
305305
/// use nalgebra::{MatrixView, Const, Dyn};
306306
///
@@ -318,7 +318,7 @@ where
318318
///
319319
/// # fn main() -> pyo3::PyResult<()> {
320320
/// Python::attach(|py| {
321-
/// let np = py.eval(c_str!("__import__('numpy')"), None, None)?;
321+
/// let np = py.eval(c"__import__('numpy')", None, None)?;
322322
/// let sum_standard_layout = wrap_pyfunction!(sum_standard_layout)(py)?;
323323
/// let sum_dynamic_strides = wrap_pyfunction!(sum_dynamic_strides)(py)?;
324324
///
@@ -682,7 +682,6 @@ mod tests {
682682
};
683683

684684
use crate::array::PyArray1;
685-
use pyo3::ffi::c_str;
686685

687686
#[test]
688687
fn test_debug_formatting() {
@@ -728,7 +727,7 @@ mod tests {
728727
// The view will make the internal reference check of `PyArray_Resize` fail.
729728
let locals = [("array", &array)].into_py_dict(py).unwrap();
730729
let _view = py
731-
.eval(c_str!("array[:]"), None, Some(&locals))
730+
.eval(c"array[:]", None, Some(&locals))
732731
.unwrap()
733732
.cast_into::<PyArray1<f64>>()
734733
.unwrap();

‎src/borrow/shared.rs‎

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use std::slice::from_raw_parts;
66
use std::sync::Mutex;
77

88
use num_integer::gcd;
9-
use pyo3::ffi::c_str;
109
use pyo3::sync::PyOnceLock;
1110
use pyo3::types::{PyAnyMethods, PyCapsuleMethods};
1211
use pyo3::{exceptions::PyTypeError, types::PyCapsule, PyResult, Python};
@@ -154,7 +153,7 @@ fn insert_shared<'py>(py: Python<'py>) -> PyResult<NonNull<Shared>> {
154153
// SAFETY: All versions of the shared borrow checking API start with a version field.
155154
let version = unsafe {
156155
*capsule
157-
.pointer_checked(Some(c_str!("_RUST_NUMPY_BORROW_CHECKING_API")))?
156+
.pointer_checked(Some(c"_RUST_NUMPY_BORROW_CHECKING_API"))?
158157
.cast::<u64>()
159158
.as_ptr() // FIXME(icxolu): use read on MSRV 1.80
160159
};
@@ -164,7 +163,7 @@ fn insert_shared<'py>(py: Python<'py>) -> PyResult<NonNull<Shared>> {
164163
)));
165164
}
166165

167-
let ptr = capsule.pointer_checked(Some(c_str!("_RUST_NUMPY_BORROW_CHECKING_API")))?;
166+
let ptr = capsule.pointer_checked(Some(c"_RUST_NUMPY_BORROW_CHECKING_API"))?;
168167

169168
// Intentionally leak a reference to the capsule
170169
// so we can safely cache a pointer into its interior.
@@ -455,7 +454,6 @@ mod tests {
455454
use crate::array::{PyArray, PyArray1, PyArray2, PyArray3, PyArrayMethods};
456455
use crate::convert::IntoPyArray;
457456
use crate::untyped_array::PyUntypedArrayMethods;
458-
use pyo3::ffi::c_str;
459457

460458
struct BorrowFlagsState {
461459
#[cfg(not(Py_GIL_DISABLED))]
@@ -535,7 +533,7 @@ mod tests {
535533

536534
let locals = [("array", &array)].into_py_dict(py).unwrap();
537535
let view = py
538-
.eval(c_str!("array[:,:,0]"), None, Some(&locals))
536+
.eval(c"array[:,:,0]", None, Some(&locals))
539537
.unwrap()
540538
.cast_into::<PyArray2<f64>>()
541539
.unwrap();
@@ -564,7 +562,7 @@ mod tests {
564562

565563
let locals = [("array", &array)].into_py_dict(py).unwrap();
566564
let view = py
567-
.eval(c_str!("array[:,:,0]"), None, Some(&locals))
565+
.eval(c"array[:,:,0]", None, Some(&locals))
568566
.unwrap()
569567
.cast_into::<PyArray2<f64>>()
570568
.unwrap();
@@ -599,7 +597,7 @@ mod tests {
599597

600598
let locals = [("array", &array)].into_py_dict(py).unwrap();
601599
let view1 = py
602-
.eval(c_str!("array[:,:,0]"), None, Some(&locals))
600+
.eval(c"array[:,:,0]", None, Some(&locals))
603601
.unwrap()
604602
.cast_into::<PyArray2<f64>>()
605603
.unwrap();
@@ -610,7 +608,7 @@ mod tests {
610608

611609
let locals = [("view1", &view1)].into_py_dict(py).unwrap();
612610
let view2 = py
613-
.eval(c_str!("view1[:,0]"), None, Some(&locals))
611+
.eval(c"view1[:,0]", None, Some(&locals))
614612
.unwrap()
615613
.cast_into::<PyArray1<f64>>()
616614
.unwrap();
@@ -647,7 +645,7 @@ mod tests {
647645

648646
let locals = [("array", &array)].into_py_dict(py).unwrap();
649647
let view1 = py
650-
.eval(c_str!("array[:,:,0]"), None, Some(&locals))
648+
.eval(c"array[:,:,0]", None, Some(&locals))
651649
.unwrap()
652650
.cast_into::<PyArray2<f64>>()
653651
.unwrap();
@@ -658,7 +656,7 @@ mod tests {
658656

659657
let locals = [("view1", &view1)].into_py_dict(py).unwrap();
660658
let view2 = py
661-
.eval(c_str!("view1[:,0]"), None, Some(&locals))
659+
.eval(c"view1[:,0]", None, Some(&locals))
662660
.unwrap()
663661
.cast_into::<PyArray1<f64>>()
664662
.unwrap();
@@ -701,7 +699,7 @@ mod tests {
701699

702700
let locals = [("array", &array)].into_py_dict(py).unwrap();
703701
let view = py
704-
.eval(c_str!("array[::-1,:,::-1]"), None, Some(&locals))
702+
.eval(c"array[::-1,:,::-1]", None, Some(&locals))
705703
.unwrap()
706704
.cast_into::<PyArray3<f64>>()
707705
.unwrap();
@@ -750,7 +748,7 @@ mod tests {
750748
let locals = [("array", array)].into_py_dict(py).unwrap();
751749

752750
let view1 = py
753-
.eval(c_str!("array[:,::3]"), None, Some(&locals))
751+
.eval(c"array[:,::3]", None, Some(&locals))
754752
.unwrap()
755753
.cast_into::<PyArray2<f64>>()
756754
.unwrap();
@@ -761,7 +759,7 @@ mod tests {
761759
assert_eq!(key1.gcd_strides, 8);
762760

763761
let view2 = py
764-
.eval(c_str!("array[:,1::3]"), None, Some(&locals))
762+
.eval(c"array[:,1::3]", None, Some(&locals))
765763
.unwrap()
766764
.cast_into::<PyArray2<f64>>()
767765
.unwrap();
@@ -772,7 +770,7 @@ mod tests {
772770
assert_eq!(key2.gcd_strides, 8);
773771

774772
let view3 = py
775-
.eval(c_str!("array[:,::2]"), None, Some(&locals))
773+
.eval(c"array[:,::2]", None, Some(&locals))
776774
.unwrap()
777775
.cast_into::<PyArray2<f64>>()
778776
.unwrap();
@@ -783,7 +781,7 @@ mod tests {
783781
assert_eq!(key3.gcd_strides, 16);
784782

785783
let view4 = py
786-
.eval(c_str!("array[:,1::2]"), None, Some(&locals))
784+
.eval(c"array[:,1::2]", None, Some(&locals))
787785
.unwrap()
788786
.cast_into::<PyArray2<f64>>()
789787
.unwrap();
@@ -852,7 +850,7 @@ mod tests {
852850
let locals = [("array", array)].into_py_dict(py).unwrap();
853851

854852
let view1 = py
855-
.eval(c_str!("array[:5]"), None, Some(&locals))
853+
.eval(c"array[:5]", None, Some(&locals))
856854
.unwrap()
857855
.cast_into::<PyArray1<f64>>()
858856
.unwrap();
@@ -871,7 +869,7 @@ mod tests {
871869
}
872870

873871
let view2 = py
874-
.eval(c_str!("array[5:]"), None, Some(&locals))
872+
.eval(c"array[5:]", None, Some(&locals))
875873
.unwrap()
876874
.cast_into::<PyArray1<f64>>()
877875
.unwrap();
@@ -892,7 +890,7 @@ mod tests {
892890
}
893891

894892
let view3 = py
895-
.eval(c_str!("array[5:]"), None, Some(&locals))
893+
.eval(c"array[5:]", None, Some(&locals))
896894
.unwrap()
897895
.cast_into::<PyArray1<f64>>()
898896
.unwrap();
@@ -916,7 +914,7 @@ mod tests {
916914
}
917915

918916
let view4 = py
919-
.eval(c_str!("array[7:]"), None, Some(&locals))
917+
.eval(c"array[7:]", None, Some(&locals))
920918
.unwrap()
921919
.cast_into::<PyArray1<f64>>()
922920
.unwrap();

‎src/datetime.rs‎

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@
1111
//!
1212
//! ```
1313
//! use numpy::{datetime::{units, Datetime, Timedelta}, PyArray1, PyArrayMethods};
14-
//! use pyo3::{Python, types::PyAnyMethods, ffi::c_str};
14+
//! use pyo3::{Python, types::PyAnyMethods};
1515
//! # use pyo3::types::PyDict;
1616
//!
1717
//! # fn main() -> pyo3::PyResult<()> {
1818
//! Python::attach(|py| {
1919
//! # let locals = py
20-
//! # .eval(c_str!("{ 'np': __import__('numpy') }"), None, None)?
20+
//! # .eval(c"{ 'np': __import__('numpy') }", None, None)?
2121
//! # .cast_into::<PyDict>()?;
2222
//! #
2323
//! let array = py
2424
//! .eval(
25-
//! c_str!("np.array([np.datetime64('2017-04-21')])"),
25+
//! c"np.array([np.datetime64('2017-04-21')])",
2626
//! None,
2727
//! Some(&locals),
2828
//! )?
@@ -35,7 +35,7 @@
3535
//!
3636
//! let array = py
3737
//! .eval(
38-
//! c_str!("np.array([np.datetime64('2022-03-29')]) - np.array([np.datetime64('2017-04-21')])"),
38+
//! c"np.array([np.datetime64('2022-03-29')]) - np.array([np.datetime64('2017-04-21')])",
3939
//! None,
4040
//! Some(&locals),
4141
//! )?
@@ -256,7 +256,6 @@ mod tests {
256256
use super::*;
257257

258258
use pyo3::{
259-
ffi::c_str,
260259
py_run,
261260
types::{PyDict, PyModule},
262261
};
@@ -267,14 +266,14 @@ mod tests {
267266
fn from_python_to_rust() {
268267
Python::attach(|py| {
269268
let locals = py
270-
.eval(c_str!("{ 'np': __import__('numpy') }"), None, None)
269+
.eval(c"{ 'np': __import__('numpy') }", None, None)
271270
.unwrap()
272271
.cast_into::<PyDict>()
273272
.unwrap();
274273

275274
let array = py
276275
.eval(
277-
c_str!("np.array([np.datetime64('1970-01-01')])"),
276+
c"np.array([np.datetime64('1970-01-01')])",
278277
None,
279278
Some(&locals),
280279
)
@@ -295,7 +294,7 @@ mod tests {
295294
*array.readwrite().get_mut(0).unwrap() = Timedelta::<units::Minutes>::from(5);
296295

297296
let np = py
298-
.eval(c_str!("__import__('numpy')"), None, None)
297+
.eval(c"__import__('numpy')", None, None)
299298
.unwrap()
300299
.cast_into::<PyModule>()
301300
.unwrap();

0 commit comments

Comments
 (0)