Slice with negative step inconsistent with python result

Open
#312 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
rust
Domain
data

Research direction

Start with the Si documentation linked in the issue and the slice macro behavior exercised by the Rust example. Compare negative-step defaults against the Python cases, then determine whether the documented semantics or implementation should change; done means the behavior is decided and either corrected or clearly documented with regression coverage.

Written by the indexing model from the issue text.

Description

First of all, I understand that this crate is not meant to reproduce all feature in python, but since in the docs about Si python slice is used as comparison, so I believe this is worth to bring up.

Here is some test case with ndarray:

#[macro_use(s)]
extern crate ndarray;
use ndarray::prelude::*;


fn main() {
    let x: Array1<usize> = Array::zeros(16);

    println!("{}", x.slice(s![..4;1]).len());
    println!("{}", x.slice(s![4..;1]).len());
    println!("{}", x.slice(s![..-4;1]).len());
    println!("{}", x.slice(s![-4..;1]).len());
    println!("{}", x.slice(s![..4;-1]).len());
    println!("{}", x.slice(s![4..;-1]).len());
    println!("{}", x.slice(s![..-4;-1]).len());
    println!("{}", x.slice(s![-4..;-1]).len());
}

which return:

4
12
12
4
4
12
12
4

and in the corresponding python test case (in both python 2.7.6 and python 3.4.3):

def main():
    x = [0] * 16
    print(len(x[:4:1]))
    print(len(x[4::1]))
    print(len(x[:-4:1]))
    print(len(x[-4::1]))
    print(len(x[:4:-1]))
    print(len(x[4::-1]))
    print(len(x[:-4:-1]))
    print(len(x[-4::-1]))


if __name__ == '__main__':
    main()

which return:

4
12
12
4
11
5
3
13

It seems that, with negative step, the default begin is n - 1 and the default end is 0 for python. To be honest, I prefer the ndarray approach to kept the default consistance, but I believe this should either mention in the docs or changed.

Dominant language
Rust
Stars
4.3k
Forks
391
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from rust-ndarray/ndarray

All issues in rust-ndarray/ndarray

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.