MCPcopy Create free account
hub / github.com/PyO3/rust-numpy / view_of_view_without_base_object

Function view_of_view_without_base_object

src/borrow/shared.rs:592–637  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

590
591 #[test]
592 fn view_of_view_without_base_object() {
593 Python::attach(|py| {
594 let array = PyArray::<f64, _>::zeros(py, (1, 2, 3), false);
595
596 let locals = [("array", &array)].into_py_dict(py).unwrap();
597 let view1 = py
598 .eval(c_str!("array[:,:,0]"), None, Some(&locals))
599 .unwrap()
600 .cast_into::<PyArray2<f64>>()
601 .unwrap();
602 assert_ne!(
603 view1.as_ptr().cast::<c_void>(),
604 array.as_ptr().cast::<c_void>()
605 );
606
607 let locals = [("view1", &view1)].into_py_dict(py).unwrap();
608 let view2 = py
609 .eval(c_str!("view1[:,0]"), None, Some(&locals))
610 .unwrap()
611 .cast_into::<PyArray1<f64>>()
612 .unwrap();
613 assert_ne!(
614 view2.as_ptr().cast::<c_void>(),
615 array.as_ptr().cast::<c_void>()
616 );
617 assert_ne!(
618 view2.as_ptr().cast::<c_void>(),
619 view1.as_ptr().cast::<c_void>()
620 );
621
622 let base = unsafe { (*view2.as_array_ptr()).base };
623 assert_eq!(base as *mut c_void, array.as_ptr().cast::<c_void>());
624
625 let base = unsafe { (*view1.as_array_ptr()).base };
626 assert_eq!(base as *mut c_void, array.as_ptr().cast::<c_void>());
627
628 let base_address = base_address(py, view2.as_array_ptr());
629 assert_ne!(base_address, view2.as_ptr().cast::<c_void>());
630 assert_ne!(base_address, view1.as_ptr().cast::<c_void>());
631 assert_eq!(base_address, base as *mut c_void);
632
633 let data_range = data_range(py, view2.as_array_ptr());
634 assert_eq!(data_range.0, array.data() as *mut c_char);
635 assert_eq!(data_range.1, unsafe { array.data().add(1) } as *mut c_char);
636 });
637 }
638
639 #[test]
640 fn view_of_view_with_base_object() {

Callers

nothing calls this directly

Calls 4

zerosFunction · 0.85
base_addressFunction · 0.85
data_rangeFunction · 0.85
as_array_ptrMethod · 0.80

Tested by

no test coverage detected