@@ -23,16 +23,16 @@ <h1><a href="../../../index.html">All files</a> / <a href="index.html">ndarray/w
2323 < div class ='clearfix '>
2424
2525 < div class ='fl pad1y space-right2 '>
26- < span class ="strong "> 97.97 % </ span >
26+ < span class ="strong "> 98.24 % </ span >
2727 < span class ="quiet "> Statements</ span >
28- < span class ='fraction '> 97/99 </ span >
28+ < span class ='fraction '> 112/114 </ span >
2929 </ div >
3030
3131
3232 < div class ='fl pad1y space-right2 '>
33- < span class ="strong "> 88.88 % </ span >
33+ < span class ="strong "> 92.85 % </ span >
3434 < span class ="quiet "> Branches</ span >
35- < span class ='fraction '> 8/9 </ span >
35+ < span class ='fraction '> 13/14 </ span >
3636 </ div >
3737
3838
@@ -44,9 +44,9 @@ <h1><a href="../../../index.html">All files</a> / <a href="index.html">ndarray/w
4444
4545
4646 < div class ='fl pad1y space-right2 '>
47- < span class ="strong "> 97.97 % </ span >
47+ < span class ="strong "> 98.24 % </ span >
4848 < span class ="quiet "> Lines</ span >
49- < span class ='fraction '> 97/99 </ span >
49+ < span class ='fraction '> 112/114 </ span >
5050 </ div >
5151
5252
@@ -162,7 +162,22 @@ <h1><a href="../../../index.html">All files</a> / <a href="index.html">ndarray/w
162162< a name ='L97 '> </ a > < a href ='#L97 '> 97</ a >
163163< a name ='L98 '> </ a > < a href ='#L98 '> 98</ a >
164164< a name ='L99 '> </ a > < a href ='#L99 '> 99</ a >
165- < a name ='L100 '> </ a > < a href ='#L100 '> 100</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-yes "> 1x</ span >
165+ < a name ='L100 '> </ a > < a href ='#L100 '> 100</ a >
166+ < a name ='L101 '> </ a > < a href ='#L101 '> 101</ a >
167+ < a name ='L102 '> </ a > < a href ='#L102 '> 102</ a >
168+ < a name ='L103 '> </ a > < a href ='#L103 '> 103</ a >
169+ < a name ='L104 '> </ a > < a href ='#L104 '> 104</ a >
170+ < a name ='L105 '> </ a > < a href ='#L105 '> 105</ a >
171+ < a name ='L106 '> </ a > < a href ='#L106 '> 106</ a >
172+ < a name ='L107 '> </ a > < a href ='#L107 '> 107</ a >
173+ < a name ='L108 '> </ a > < a href ='#L108 '> 108</ a >
174+ < a name ='L109 '> </ a > < a href ='#L109 '> 109</ a >
175+ < a name ='L110 '> </ a > < a href ='#L110 '> 110</ a >
176+ < a name ='L111 '> </ a > < a href ='#L111 '> 111</ a >
177+ < a name ='L112 '> </ a > < a href ='#L112 '> 112</ a >
178+ < a name ='L113 '> </ a > < a href ='#L113 '> 113</ a >
179+ < a name ='L114 '> </ a > < a href ='#L114 '> 114</ a >
180+ < a name ='L115 '> </ a > < a href ='#L115 '> 115</ a > </ td > < td class ="line-coverage quiet "> < span class ="cline-any cline-yes "> 1x</ span >
166181< span class ="cline-any cline-yes "> 1x</ span >
167182< span class ="cline-any cline-yes "> 1x</ span >
168183< span class ="cline-any cline-yes "> 1x</ span >
@@ -223,39 +238,54 @@ <h1><a href="../../../index.html">All files</a> / <a href="index.html">ndarray/w
223238< span class ="cline-any cline-yes "> 1x</ span >
224239< span class ="cline-any cline-yes "> 1x</ span >
225240< span class ="cline-any cline-yes "> 1x</ span >
226- < span class ="cline-any cline-yes "> 29x</ span >
227- < span class ="cline-any cline-yes "> 29x</ span >
228- < span class ="cline-any cline-yes "> 29x</ span >
229- < span class ="cline-any cline-yes "> 29x</ span >
230- < span class ="cline-any cline-yes "> 29x</ span >
231- < span class ="cline-any cline-yes "> 29x</ span >
232- < span class ="cline-any cline-yes "> 29x</ span >
233- < span class ="cline-any cline-yes "> 29x</ span >
234- < span class ="cline-any cline-yes "> 10x</ span >
235- < span class ="cline-any cline-yes "> 10x</ span >
236- < span class ="cline-any cline-yes "> 29x</ span >
241+ < span class ="cline-any cline-yes "> 1x</ span >
242+ < span class ="cline-any cline-yes "> 1x</ span >
243+ < span class ="cline-any cline-yes "> 1x</ span >
244+ < span class ="cline-any cline-yes "> 1x</ span >
245+ < span class ="cline-any cline-yes "> 34x</ span >
246+ < span class ="cline-any cline-yes "> 34x</ span >
247+ < span class ="cline-any cline-yes "> 34x</ span >
248+ < span class ="cline-any cline-yes "> 34x</ span >
249+ < span class ="cline-any cline-yes "> 34x</ span >
250+ < span class ="cline-any cline-yes "> 34x</ span >
251+ < span class ="cline-any cline-yes "> 34x</ span >
252+ < span class ="cline-any cline-yes "> 34x</ span >
253+ < span class ="cline-any cline-yes "> 34x</ span >
237254< span class ="cline-any cline-yes "> 10x</ span >
238255< span class ="cline-any cline-yes "> 10x</ span >
256+ < span class ="cline-any cline-yes "> 34x</ span >
239257< span class ="cline-any cline-yes "> 9x</ span >
240258< span class ="cline-any cline-yes "> 9x</ span >
241- < span class ="cline-any cline-yes "> 9x</ span >
242- < span class ="cline-any cline-yes "> 9x</ span >
243- < span class ="cline-any cline-yes "> 9x</ span >
244- < span class ="cline-any cline-yes "> 9x</ span >
245- < span class ="cline-any cline-yes "> 9x</ span >
246- < span class ="cline-any cline-yes "> 29x</ span >
247- < span class ="cline-any cline-yes "> 27x</ span >
248- < span class ="cline-any cline-yes "> 27x</ span >
259+ < span class ="cline-any cline-yes "> 15x</ span >
260+ < span class ="cline-any cline-yes "> 34x</ span >
261+ < span class ="cline-any cline-yes "> 8x</ span >
262+ < span class ="cline-any cline-yes "> 8x</ span >
263+ < span class ="cline-any cline-yes "> 7x</ span >
264+ < span class ="cline-any cline-yes "> 7x</ span >
265+ < span class ="cline-any cline-yes "> 7x</ span >
266+ < span class ="cline-any cline-yes "> 7x</ span >
267+ < span class ="cline-any cline-yes "> 7x</ span >
268+ < span class ="cline-any cline-yes "> 7x</ span >
269+ < span class ="cline-any cline-yes "> 7x</ span >
270+ < span class ="cline-any cline-yes "> 7x</ span >
271+ < span class ="cline-any cline-yes "> 7x</ span >
272+ < span class ="cline-any cline-yes "> 34x</ span >
273+ < span class ="cline-any cline-yes "> 20x</ span >
274+ < span class ="cline-any cline-yes "> 20x</ span >
275+ < span class ="cline-any cline-yes "> 1x</ span >
276+ < span class ="cline-any cline-yes "> 1x</ span >
277+ < span class ="cline-any cline-yes "> 19x</ span >
278+ < span class ="cline-any cline-yes "> 20x</ span >
249279< span class ="cline-any cline-no "> </ span >
250280< span class ="cline-any cline-no "> </ span >
251- < span class ="cline-any cline-yes "> 27x </ span >
252- < span class ="cline-any cline-yes "> 27x </ span >
253- < span class ="cline-any cline-yes "> 9x </ span >
254- < span class ="cline-any cline-yes "> 9x </ span >
255- < span class ="cline-any cline-yes "> 9x </ span >
256- < span class ="cline-any cline-yes "> 9x </ span >
257- < span class ="cline-any cline-yes "> 9x </ span >
258- < span class ="cline-any cline-yes "> 29x </ span >
281+ < span class ="cline-any cline-yes "> 19x </ span >
282+ < span class ="cline-any cline-yes "> 19x </ span >
283+ < span class ="cline-any cline-yes "> 6x </ span >
284+ < span class ="cline-any cline-yes "> 6x </ span >
285+ < span class ="cline-any cline-yes "> 6x </ span >
286+ < span class ="cline-any cline-yes "> 6x </ span >
287+ < span class ="cline-any cline-yes "> 6x </ span >
288+ < span class ="cline-any cline-yes "> 34x </ span >
259289< span class ="cline-any cline-yes "> 1x</ span >
260290< span class ="cline-any cline-yes "> 1x</ span >
261291< span class ="cline-any cline-yes "> 1x</ span >
@@ -284,25 +314,29 @@ <h1><a href="../../../index.html">All files</a> / <a href="index.html">ndarray/w
284314// MODULES //
285315
286316var isndarrayLike = require( '@stdlib/assert/is-ndarray-like' );
287- var isIntegerArray = require( '@stdlib/assert/is-integer-array' );
317+ var isCollection = require( '@stdlib/assert/is-collection' );
318+ var isInteger = require( '@stdlib/assert/is-integer' ).isPrimitive;
288319var getShape = require( '@stdlib/ndarray/shape' );
289320var emptyLike = require( '@stdlib/ndarray/empty-like' );
290321var normalizeIndex = require( '@stdlib/ndarray/base/normalize-index' );
291322var assign = require( '@stdlib/ndarray/base/assign' );
323+ var resolveGetter = require( '@stdlib/array/base/resolve-getter' );
324+ var join = require( '@stdlib/array/base/join' );
292325var format = require( '@stdlib/string/format' );
293326
294327
295328// MAIN //
296329
297330/**
298- * Returns an ndarray with element at specified indices replaced by a provided value.
331+ * Returns a new ndarray with the element at a specified index replaced by a provided value.
299332*
300333* @param {ndarray} x - input ndarray
301334* @param {IntegerArray} indices - indices of the element to replace
302335* @param {*} value - value to set
303- * @throws {TypeError} First argument must be an ndarray
304- * @throws {TypeError} Second argument must be an array of integers
305- * @throws {RangeError} Third argument must be an array of valid indices
336+ * @throws {TypeError} first argument must be an ndarray
337+ * @throws {TypeError} second argument must be an array of integers
338+ * @throws {RangeError} second argument must be an array of valid indices
339+ * @throws {RangeError} number of indices must equal the number of input ndarray dimensions
306340* @returns {ndarray} output ndarray
307341*
308342* @example
@@ -326,26 +360,37 @@ <h1><a href="../../../index.html">All files</a> / <a href="index.html">ndarray/w
326360 var args;
327361 var out;
328362 var idx;
363+ var get;
329364 var sh;
330365 var i;
331366
332367 if ( !isndarrayLike( x ) ) {
333368 throw new TypeError( format( 'invalid argument. First argument must be an ndarray. Value: `%s`.', x ) );
334369 }
335- if ( !isIntegerArray ( indices ) ) {
370+ if ( !isCollection ( indices ) ) {
336371 throw new TypeError( format( 'invalid argument. Second argument must be an array of integers. Value: `%s`.', indices ) );
337372 }
338- // Copy the input array:
339373 sh = getShape( x );
374+ if ( indices.length !== sh.length ) {
375+ throw new RangeError( format( 'invalid argument. Number of indices does not match the number of array dimensions. Array shape: (%s). Number of indices: %u.', join( sh, ',' ), indices.length ) );
376+ }
377+ // Copy the input array:
340378 out = emptyLike( x );
341379 assign( [ x, out ] );
342380
343- // Resolve the provided indices:
381+ // Resolve an element accessor for retrieving indices:
382+ get = resolveGetter( indices );
383+
384+ // Normalize the provided indices...
344385 args = [];
345386 for ( i = 0; i < sh.length; i++ ) {
346- idx = normalizeIndex( indices[ i ], sh[ i ] );
387+ idx = get( indices, i );
388+ if ( !isInteger( idx ) ) {
389+ throw new TypeError( format( 'invalid argument. Second argument must be an array of integers. Value: `%s`.', indices ) );
390+ }
391+ idx = normalizeIndex( idx, sh[ i ] );
347392 if ( idx === -1 ) < span class ="branch-0 cbranch-no " title ="branch not covered " > {</ span >
348- < span class ="cstat-no " title ="statement not covered " > throw new RangeError( format( 'invalid argument. Second argument must be an array of valid indices . Value: %s`.` ', indices ) );</ span >
393+ < span class ="cstat-no " title ="statement not covered " > throw new RangeError( format( 'invalid argument. Second argument contains an out-of-bounds index. Array shape: (%s) . Value: `[%s]`. ', join( sh, ',' ), join( indices, ',' ) ) );</ span >
349394< span class ="cstat-no " title ="statement not covered " > }</ span >
350395 args.push( idx );
351396 }
@@ -367,7 +412,7 @@ <h1><a href="../../../index.html">All files</a> / <a href="index.html">ndarray/w
367412 < div class ='footer quiet pad2 space-top1 center small '>
368413 Code coverage generated by
369414 < a href ="https://istanbul.js.org/ " target ="_blank " rel ="noopener noreferrer "> istanbul</ a >
370- at 2025-08-25T20:11:07.984Z
415+ at 2025-08-30T00:39:13.138Z
371416 </ div >
372417 < script src ="../../../prettify.js "> </ script >
373418 < script >
0 commit comments