All files / fill-diagonal/lib main.js

94.28% Statements 66/70
100% Branches 1/1
0% Functions 0/1
94.28% Lines 66/70

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 711x 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 diagonal = require( '@stdlib/ndarray/base/diagonal' );
var fill = require( '@stdlib/ndarray/base/fill' );
 
 
// MAIN //
 
/**
* Fills a specified diagonal of a matrix (or stack of matrices) with a scalar value.
*
* ## Notes
*
* -   The order of the dimension indices contained in `dims` matters. The first element specifies the row-like dimension. The second element specifies the column-like dimension.
* -   Each provided dimension index must reside on the interval `[-ndims, ndims-1]`.
* -   The diagonal offset `k` is interpreted as `column - row`. Accordingly, when `k = 0`, the function fills the main diagonal; when `k > 0`, the function fills the diagonal above the main diagonal; and when `k < 0`, the function fills the diagonal below the main diagonal.
* -   The function mutates the input ndarray in-place.
*
* @param {ndarray} x - input array
* @param {*} value - scalar value
* @param {IntegerArray} dims - dimension indices defining the plane in which to fill the diagonal
* @param {integer} k - diagonal offset
* @throws {RangeError} must provide exactly two dimension indices
* @throws {RangeError} input ndarray must have at least two dimensions
* @throws {RangeError} must provide valid dimension indices
* @throws {Error} must provide unique dimension indices
* @throws {TypeError} second argument cannot be safely cast to the input array data type
* @returns {ndarray} input ndarray
*
* @example
* var zeros = require( '@stdlib/ndarray/zeros' );
*
* var x = zeros( [ 3, 3 ] );
* // returns <ndarray>[ [ 0.0, 0.0, 0.0 ], [ 0.0, 0.0, 0.0 ], [ 0.0, 0.0, 0.0 ] ]
*
* var out = fillDiagonal( x, 1.0, [ 0, 1 ], 0 );
* // returns <ndarray>[ [ 1.0, 0.0, 0.0 ], [ 0.0, 1.0, 0.0 ], [ 0.0, 0.0, 1.0 ] ]
*
* var bool = ( out === x );
* // returns true
*/
function fillDiagonal( x, value, dims, k ) {
	fill( diagonal( x, dims, k, true ), value );
	return x;
}
 
 
// EXPORTS //
 
module.exports = fillDiagonal;