normalizeMultiSlice
Normalize a
MultiSlice
object.
Usage
var normalizeMultiSlice = require( '@stdlib/slice/base/normalize-multi-slice' );
normalizeMultiSlice( slice, shape, strict )
Normalizes a MultiSlice
object, where shape
specifies the maximum allowed slice shape.
var Slice = require( '@stdlib/slice/ctor' );
var MultiSlice = require( '@stdlib/slice/multi' );
var shape = [ 10, 10, 10 ];
var s1 = new MultiSlice( new Slice( 2, null, 2 ), null, -4 );
var s2 = normalizeMultiSlice( s1, shape, false );
// returns <MultiSlice>
var d = s2.data;
// returns [ <Slice>, <Slice>, <Slice> ]
var v = d[ 0 ];
// returns <Slice>
var start = v.start;
// returns 2
var stop = v.stop;
// returns 10
var step = v.step;
// returns 2
v = d[ 1 ];
// returns <Slice>
start = v.start;
// returns 0
stop = v.stop;
// returns 10
step = v.step;
// returns 1
v = d[ 2 ];
// returns <Slice>
start = v.start;
// returns 6
stop = v.stop;
// returns 7
step = v.step;
// returns 1
When strict
is true
, the function returns an error object if an input slice exceeds index bounds.
var Slice = require( '@stdlib/slice/ctor' );
var MultiSlice = require( '@stdlib/slice/multi' );
var s1 = new MultiSlice( new Slice( -20, 20, 1 ) );
var s2 = normalizeMultiSlice( s1, [ 10 ], true );
// returns { 'code': 'ERR_SLICE_OUT_OF_BOUNDS' }
A returned error object may have one of the following error codes:
- ERR_SLICE_OUT_OF_BOUNDS: a slice exceeds index bounds.
Examples
var S = require( '@stdlib/slice/ctor' );
var MultiSlice = require( '@stdlib/slice/multi' );
var normalizeMultiSlice = require( '@stdlib/slice/base/normalize-multi-slice' );
var s1 = new MultiSlice( null, S(), -1 );
var s2 = normalizeMultiSlice( s1, [ 5, 10, 7 ], false );
console.log( '%s => %s', s1.toString(), s2.toString() );
s1 = new MultiSlice( null );
s2 = normalizeMultiSlice( s1, [ 5 ], false );
console.log( '%s => %s', s1.toString(), s2.toString() );
s1 = new MultiSlice( S( -1, null, -1 ), 3 );
s2 = normalizeMultiSlice( s1, [ 5, 5 ], false );
console.log( '%s => %s', s1.toString(), s2.toString() );
s1 = new MultiSlice( 2, S( -10, -2, 2 ), 3, null );
s2 = normalizeMultiSlice( s1, [ 10, 10, 10, 10 ], false );
console.log( '%s => %s', s1.toString(), s2.toString() );
s1 = new MultiSlice( S( 1, 20, 2 ), S( null, null, -1 ) );
s2 = normalizeMultiSlice( s1, [ 10, 10 ], false );
console.log( '%s => %s', s1.toString(), s2.toString() );