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() );
Did you find this page helpful?