All files base.js

100% Statements 98/98
100% Branches 1/1
100% Functions 0/0
100% Lines 98/98

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 991x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
/**
* @license Apache-2.0
*
* Copyright (c) 2026 The Stdlib Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
 
'use strict';
 
// MODULES //
 
var dtypes = require( '@stdlib/ndarray/dtypes' );
var gscal = require( '@stdlib/blas/base/ndarray/gscal' );
var dscal = require( '@stdlib/blas/base/ndarray/dscal' );
var sscal = require( '@stdlib/blas/base/ndarray/sscal' );
var zscal = require( '@stdlib/blas/base/ndarray/zscal' );
var cscal = require( '@stdlib/blas/base/ndarray/cscal' );
var factory = require( '@stdlib/ndarray/base/nullary-strided1d-dispatch-factory' );
 
 
// VARIABLES //
 
var idtypes0 = dtypes( 'numeric_and_generic' ); // input ndarray
var idtypes1 = dtypes( 'numeric_and_generic' ); // alpha ndarray
var odtypes = dtypes( 'numeric_and_generic' );
var table = {
	'types': [
		'float64',    // input/output
		'float32',    // input/output
		'complex128', // input/output
		'complex64'   // input/output
 
		// NOTE: we cannot support dispatch to specialized kernels, such as `csscal` and `zdscal`, as dispatch is based solely on the data type of the input ndarray and `alpha` must be cast to the data type of the input ndarray
	],
	'fcns': [
		dscal,
		sscal,
		zscal,
		cscal
	],
	'default': gscal
};
var options = {
	'strictTraversalOrder': true
};
 
 
// MAIN //
 
/**
* Multiplies an input ndarray by a scalar constant along one or more ndarray dimensions.
*
* @private
* @name scal
* @type {Function}
* @param {ndarray} x - input ndarray
* @param {ndarray} alpha - ndarray containing the scalar constant
* @param {Options} [options] - function options
* @param {IntegerArray} [options.dims] - list of dimensions over which to perform operation
* @throws {TypeError} first argument must be an ndarray-like object
* @throws {TypeError} second argument must be an ndarray-like object
* @throws {TypeError} options argument must be an object
* @throws {RangeError} dimension indices must not exceed input ndarray bounds
* @throws {RangeError} number of dimension indices must not exceed the number of input ndarray dimensions
* @throws {Error} must provide valid options
* @returns {ndarray} input ndarray
*
* @example
* var array = require( '@stdlib/ndarray/array' );
* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
*
* var x = array( [ 1.0, 2.0, 3.0, 4.0, 5.0 ] );
* // returns <ndarray>[ 1.0, 2.0, 3.0, 4.0, 5.0 ]
*
* var alpha = scalar2ndarray( 5.0, {
*     'dtype': 'float64'
* });
*
* var out = scal( x, alpha );
* // returns <ndarray>[ 5.0, 10.0, 15.0, 20.0, 25.0 ]
*/
var scal = factory( table, [ idtypes0, idtypes1 ], odtypes, options );
 
 
// EXPORTS //
 
module.exports = scal;