diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4f349a923..16e00cfb3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,8 @@ jobs: runs-on: ${{ matrix.platform.os }} #needs: [lint, check-msrv, examples] strategy: - fail-fast: ${{ !contains(github.event.pull_request.labels.*.name, 'CI-no-fail-fast') }} + #fail-fast: ${{ !contains(github.event.pull_request.labels.*.name, 'CI-no-fail-fast') }} + fail-fast: false matrix: #python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] python-version: ["3.10", "3.11"] @@ -73,7 +74,8 @@ jobs: - name: Test run: | pip install "numpy" ml_dtypes - cargo test --all-features + $Env:RUST_BACKTRACE = 1 + cargo test --all-features --verbose -- --nocapture # Not on PyPy, because no embedding API if: ${{ !startsWith(matrix.python-version, 'pypy') }} - name: Test example diff --git a/src/borrow/shared.rs b/src/borrow/shared.rs index 38f8963e5..a060f4f63 100644 --- a/src/borrow/shared.rs +++ b/src/borrow/shared.rs @@ -404,6 +404,7 @@ fn data_range<'py>(py: Python<'py>, array: *mut PyArrayObject) -> (*mut c_char, let strides = unsafe { from_raw_parts((*array).strides, nd) }; let itemsize = unsafe { PyDataType_ELSIZE(py, (*array).descr) } as isize; + println!("itemsize = {itemsize}"); let mut start = 0; let mut end = 0; @@ -609,8 +610,10 @@ mod tests { #[test] fn view_of_view_with_base_object() { Python::with_gil(|py| { + println!("A"); let array = Array::::zeros((1, 2, 3)).into_pyarray_bound(py); + println!("B"); let locals = [("array", &array)].into_py_dict_bound(py); let view1 = py .eval_bound("array[:,:,0]", None, Some(&locals)) @@ -622,6 +625,7 @@ mod tests { array.as_ptr().cast::(), ); + println!("C"); let locals = [("view1", &view1)].into_py_dict_bound(py); let view2 = py .eval_bound("view1[:,0]", None, Some(&locals)) @@ -637,21 +641,26 @@ mod tests { view1.as_ptr().cast::(), ); + println!("D"); let base = unsafe { (*view2.as_array_ptr()).base }; assert_eq!(base.cast::(), array.as_ptr().cast::()); + println!("E"); let base = unsafe { (*view1.as_array_ptr()).base }; assert_eq!(base.cast::(), array.as_ptr().cast::()); + println!("F"); let base = unsafe { (*array.as_array_ptr()).base }; assert!(!base.is_null()); + println!("G"); let base_address = base_address(py, view2.as_array_ptr()); assert_ne!(base_address, view2.as_ptr().cast::()); assert_ne!(base_address, view1.as_ptr().cast::()); assert_ne!(base_address, array.as_ptr().cast::()); assert_eq!(base_address, base.cast::()); + println!("H"); let data_range = data_range(py, view2.as_array_ptr()); assert_eq!(data_range.0, array.data().cast::()); assert_eq!(data_range.1, unsafe {