time-to-botec/squiggle/node_modules/@stdlib/ndarray/base/assert/is-contiguous
NunoSempere b6addc7f05 feat: add the node modules
Necessary in order to clearly see the squiggle hotwiring.
2022-12-03 12:44:49 +00:00
..
docs feat: add the node modules 2022-12-03 12:44:49 +00:00
include/stdlib/ndarray/base/assert feat: add the node modules 2022-12-03 12:44:49 +00:00
lib feat: add the node modules 2022-12-03 12:44:49 +00:00
src feat: add the node modules 2022-12-03 12:44:49 +00:00
manifest.json feat: add the node modules 2022-12-03 12:44:49 +00:00
package.json feat: add the node modules 2022-12-03 12:44:49 +00:00
README.md feat: add the node modules 2022-12-03 12:44:49 +00:00

isContiguous

Determine if an array is contiguous.

An array is contiguous if the memory address of each array element is adjacent to the memory address of the next array element.

Usage

var isContiguous = require( '@stdlib/ndarray/base/assert/is-contiguous' );

isContiguous( shape, strides, offset )

Returns a boolean indicating if an array is contiguous.

var shape = [ 2, 2 ];
var strides = [ 2, 1 ];
var offset = 25;

var bool = isContiguous( shape, strides, offset );
// returns true

shape = [ 10 ];
strides = [ 3 ]; // every third memory element
offset = 0;

bool = isContiguous( shape, strides, offset );
// returns false

Examples

var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
var shape2strides = require( '@stdlib/ndarray/base/shape2strides' );
var strides2offset = require( '@stdlib/ndarray/base/strides2offset' );
var randu = require( '@stdlib/random/base/randu' );
var isContiguous = require( '@stdlib/ndarray/base/assert/is-contiguous' );

var strides;
var offset;
var shape;
var bool;
var i;
var j;

shape = [ 0, 0, 0 ];

for ( i = 0; i < 100; i++ ) {
    // Generate a random array shape:
    shape[ 0 ] = discreteUniform( 1, 10 );
    shape[ 1 ] = discreteUniform( 1, 10 );
    shape[ 2 ] = discreteUniform( 1, 10 );

    // Generate strides:
    if ( randu() < 0.5 ) {
        strides = shape2strides( shape, 'row-major' );
    } else {
        strides = shape2strides( shape, 'column-major' );
    }
    j = discreteUniform( 0, shape.length-1 );
    strides[ j ] *= ( randu() < 0.5 ) ? -1 : 1;

    strides[ 0 ] *= discreteUniform( 1, 2 ); // if scaled by 1, then single segment

    // Compute the index offset:
    offset = strides2offset( shape, strides ) + 25; // include a view offset

    // Determine if the array is contiguous:
    bool = isContiguous( shape, strides, offset );
    console.log( 'Shape: %s. Strides: %s. Offset: %d. Contiguous: %s.', shape.join( 'x' ), strides.join( ',' ), offset, bool );
}