Skip to content

Commit 6a73fe2

Browse files
fix: change in routines
1 parent b16c129 commit 6a73fe2

File tree

12 files changed

+163
-75
lines changed

12 files changed

+163
-75
lines changed

lib/node_modules/@stdlib/stats/strided/dmeanvar/examples/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,6 @@ var x = discreteUniform( 10, -50, 50, {
2828
console.log( x );
2929

3030
var out = new Float64Array( 2 );
31-
dmeanvar( x.length, 1, x, 1, out, 1 );
31+
var y = dmeanvar( x.length, 1, x, 1, out, 1 );
3232
console.log( out );
33+
console.log(y);

lib/node_modules/@stdlib/stats/strided/wasm/dmeanvar/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ var x = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] );
181181
var out = new Float64Array( 4 );
182182

183183
var v = dmeanvar.ndarray( 4, 1, x, 2, 1, out, 2, 1 );
184-
// returns <Float64Array>[ 0.0, 1.25, 0.0, 6.25 ]
184+
// returns <Float64Array>[ 1.25, 6.25 ]
185185
```
186186

187187
* * *

lib/node_modules/@stdlib/stats/strided/wasm/dmeanvar/docs/types/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ interface Routine extends ModuleWrapper {
248248
* var y = dmeanvar.main( 3, 1, x, 1, out, 1 );
249249
* // returns <Float64Array>[ ~0.3333, ~4.3333 ]
250250
*/
251-
main( N: number, correction: number, xptr: number, strideX: number, out: Float64Array, strideOut: number ): Float64Array;
251+
main( N: number, correction: number, x: Float64Array, strideX: number, out: Float64Array, strideOut: number ): Float64Array;
252252

253253
/**
254254
* Computes the mean and variance of a double-precision floating-point strided array using alternative indexing semantics.

lib/node_modules/@stdlib/stats/strided/wasm/dmeanvar/docs/types/test.ts

Lines changed: 106 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -429,78 +429,150 @@ import dmeanvar = require( './index' );
429429
{
430430
const mem = new Memory({ 'initial': 1 });
431431
const mod = dmeanvar.Module( mem );
432+
const out = new Float64Array( 2 );
432433

433-
mod.ndarray( 10, 0, 1, 0 ); // $ExpectType number
434+
mod.ndarray( 0, 1, 1, 1, 0, out, 1, 0 ); // $ExpectType number
434435
}
435436

436437
// The compiler throws an error if the `ndarray` method of a module instance is provided a first argument which is not a number...
437438
{
438439
const mem = new Memory({ 'initial': 1 });
439440
const mod = dmeanvar.Module( mem );
441+
const out = new Float64Array( 2 );
440442

441-
mod.ndarray( '10', 0, 1, 0 ); // $ExpectError
442-
mod.ndarray( true, 0, 1, 0 ); // $ExpectError
443-
mod.ndarray( false, 0, 1, 0 ); // $ExpectError
444-
mod.ndarray( null, 0, 1, 0 ); // $ExpectError
445-
mod.ndarray( undefined, 0, 1, 0 ); // $ExpectError
446-
mod.ndarray( [], 0, 1, 0 ); // $ExpectError
447-
mod.ndarray( {}, 0, 1, 0 ); // $ExpectError
448-
mod.ndarray( (x: number): number => x, 0, 1, 0 ); // $ExpectError
443+
mod.ndarray( '10', 0, 1, 0, 1, out, 0, 1 ); // $ExpectError
444+
mod.ndarray( true, 0, 1, 0, 1, out, 0, 1 ); // $ExpectError
445+
mod.ndarray( false, 0, 1, 0, 1, out, 0, 1 ); // $ExpectError
446+
mod.ndarray( null, 0, 1, 0, 1, out, 0, 1 ); // $ExpectError
447+
mod.ndarray( undefined, 0, 1, 0, 1, out, 0, 1 ); // $ExpectError
448+
mod.ndarray( [], 0, 1, 0, 1, out, 0, 1 ); // $ExpectError
449+
mod.ndarray( {}, 0, 1, 0, 1, out, 0, 1 ); // $ExpectError
450+
mod.ndarray( (x: number): number => x, 0, 1, 0, 1, out, 0, 1 ); // $ExpectError
449451
}
450452

451453
// The compiler throws an error if the `ndarray` method of a module instance is provided a second argument which is not a number...
452454
{
453455
const mem = new Memory({ 'initial': 1 });
454456
const mod = dmeanvar.Module( mem );
457+
const out = new Float64Array( 2 );
455458

456-
mod.ndarray( 10, '0', 1, 0 ); // $ExpectError
457-
mod.ndarray( 10, true, 1, 0 ); // $ExpectError
458-
mod.ndarray( 10, false, 1, 0 ); // $ExpectError
459-
mod.ndarray( 10, null, 1, 0 ); // $ExpectError
460-
mod.ndarray( 10, undefined, 1, 0 ); // $ExpectError
461-
mod.ndarray( 10, [], 1, 0 ); // $ExpectError
462-
mod.ndarray( 10, {}, 1, 0 ); // $ExpectError
463-
mod.ndarray( 10, (x: number): number => x, 1, 0 ); // $ExpectError
459+
mod.ndarray( 10, '0', 1, 0, 1, out, 0, 1 ); // $ExpectError
460+
mod.ndarray( 10, true, 1, 0, 1, out, 0, 1 ); // $ExpectError
461+
mod.ndarray( 10, false, 1, 0, 1, out, 0, 1 ); // $ExpectError
462+
mod.ndarray( 10, null, 1, 0, 1, out, 0, 1 ); // $ExpectError
463+
mod.ndarray( 10, undefined, 1, 0, 1, out, 0, 1 ); // $ExpectError
464+
mod.ndarray( 10, [], 1, 0, 1, out, 0, 1 ); // $ExpectError
465+
mod.ndarray( 10, {}, 1, 0, 1, out, 0, 1 ); // $ExpectError
466+
mod.ndarray( 10, (x: number): number => x, 1, 0, 1, out, 0, 1 ); // $ExpectError
464467
}
465468

466469
// The compiler throws an error if the `ndarray` method of a module instance is provided a third argument which is not a number...
467470
{
468471
const mem = new Memory({ 'initial': 1 });
469472
const mod = dmeanvar.Module( mem );
473+
const out = new Float64Array( 2 );
470474

471-
mod.ndarray( 10, 0, '1', 0 ); // $ExpectError
472-
mod.ndarray( 10, 0, true, 0 ); // $ExpectError
473-
mod.ndarray( 10, 0, false, 0 ); // $ExpectError
474-
mod.ndarray( 10, 0, null, 0 ); // $ExpectError
475-
mod.ndarray( 10, 0, undefined, 0 ); // $ExpectError
476-
mod.ndarray( 10, 0, [], 0 ); // $ExpectError
477-
mod.ndarray( 10, 0, {}, 0 ); // $ExpectError
478-
mod.ndarray( 10, 0, (x: number): number => x, 0 ); // $ExpectError
475+
mod.ndarray( 10, 0, '1', 0, 1, out, 0, 1 ); // $ExpectError
476+
mod.ndarray( 10, 0, true, 0, 1, out, 0, 1 ); // $ExpectError
477+
mod.ndarray( 10, 0, false, 0, 1, out, 0, 1 ); // $ExpectError
478+
mod.ndarray( 10, 0, null, 0, 1, out, 0, 1 ); // $ExpectError
479+
mod.ndarray( 10, 0, undefined, 0, 1, out, 0, 1 ); // $ExpectError
480+
mod.ndarray( 10, 0, [], 0, 1, out, 0, 1 ); // $ExpectError
481+
mod.ndarray( 10, 0, {}, 0, 1, out, 0, 1 ); // $ExpectError
482+
mod.ndarray( 10, 0, (x: number): number => x, 0, 1, out, 0, 1 ); // $ExpectError
479483
}
480484

481485
// The compiler throws an error if the `ndarray` method of a module instance is provided a fourth argument which is not a number...
482486
{
483487
const mem = new Memory({ 'initial': 1 });
484488
const mod = dmeanvar.Module( mem );
489+
const out = new Float64Array( 2 );
485490

486-
mod.ndarray( 10, 0, 1, '0' ); // $ExpectError
487-
mod.ndarray( 10, 0, 1, true ); // $ExpectError
488-
mod.ndarray( 10, 0, 1, false ); // $ExpectError
489-
mod.ndarray( 10, 0, 1, null ); // $ExpectError
490-
mod.ndarray( 10, 0, 1, undefined ); // $ExpectError
491-
mod.ndarray( 10, 0, 1, [] ); // $ExpectError
492-
mod.ndarray( 10, 0, 1, {} ); // $ExpectError
493-
mod.ndarray( 10, 0, 1, (x: number): number => x ); // $ExpectError
491+
mod.ndarray( 10, 0, 1, '0', 1, out, 0, 1 ); // $ExpectError
492+
mod.ndarray( 10, 0, 1, true, 1, out, 0, 1 ); // $ExpectError
493+
mod.ndarray( 10, 0, 1, false, 1, out, 0, 1 ); // $ExpectError
494+
mod.ndarray( 10, 0, 1, null, 1, out, 0, 1 ); // $ExpectError
495+
mod.ndarray( 10, 0, 1, undefined, 1, out, 0, 1 ); // $ExpectError
496+
mod.ndarray( 10, 0, 1, [], 1, out, 0, 1 ); // $ExpectError
497+
mod.ndarray( 10, 0, 1, {}, 1, out, 0, 1 ); // $ExpectError
498+
mod.ndarray( 10, 0, 1, (x: number): number => x, 1, out, 0, 1 ); // $ExpectError
499+
}
500+
501+
// The compiler throws an error if the `ndarray` method of a module instance is provided a fifth argument which is not a number...
502+
{
503+
const mem = new Memory({ 'initial': 1 });
504+
const mod = dmeanvar.Module( mem );
505+
const out = new Float64Array( 2 );
506+
507+
mod.ndarray( 10, 0, 1, 1, '0', out, 0, 1 ); // $ExpectError
508+
mod.ndarray( 10, 0, 1, 1, true, out, 0, 1 ); // $ExpectError
509+
mod.ndarray( 10, 0, 1, 1, false, out, 0, 1 ); // $ExpectError
510+
mod.ndarray( 10, 0, 1, 1, null, out, 0, 1 ); // $ExpectError
511+
mod.ndarray( 10, 0, 1, 1, undefined, out, 0, 1 ); // $ExpectError
512+
mod.ndarray( 10, 0, 1, 1, [], out, 0, 1 ); // $ExpectError
513+
mod.ndarray( 10, 0, 1, 1, {}, out, 0, 1 ); // $ExpectError
514+
mod.ndarray( 10, 0, 1, 1, (x: number): number => x, out, 0, 1 ); // $ExpectError
515+
}
516+
517+
// The compiler throws an error if the `ndarray` method of a module instance is provided a sixth argument which is not a number...
518+
{
519+
const mem = new Memory({ 'initial': 1 });
520+
const mod = dmeanvar.Module( mem );
521+
522+
mod.ndarray( 10, 0, 1, 1, 1, '0', 0, 1 ); // $ExpectError
523+
mod.ndarray( 10, 0, 1, 1, 1, true, 0, 1 ); // $ExpectError
524+
mod.ndarray( 10, 0, 1, 1, 1, false, 0, 1 ); // $ExpectError
525+
mod.ndarray( 10, 0, 1, 1, 1, null, 0, 1 ); // $ExpectError
526+
mod.ndarray( 10, 0, 1, 1, 1, undefined, 0, 1 ); // $ExpectError
527+
mod.ndarray( 10, 0, 1, 1, 1, [], 0, 1 ); // $ExpectError
528+
mod.ndarray( 10, 0, 1, 1, 1, {}, 0, 1 ); // $ExpectError
529+
mod.ndarray( 10, 0, 1, 1, 1, (x: number): number => x, 0, 1 ); // $ExpectError
530+
}
531+
532+
// The compiler throws an error if the `ndarray` method of a module instance is provided a seventh argument which is not a number...
533+
{
534+
const mem = new Memory({ 'initial': 1 });
535+
const mod = dmeanvar.Module( mem );
536+
const out = new Float64Array( 2 );
537+
538+
mod.ndarray( 10, 0, 1, 1, 1, out, '0', 0 ); // $ExpectError
539+
mod.ndarray( 10, 0, 1, 1, 1, out, true, 0 ); // $ExpectError
540+
mod.ndarray( 10, 0, 1, 1, 1, out, false, 0 ); // $ExpectError
541+
mod.ndarray( 10, 0, 1, 1, 1, out, null, 0 ); // $ExpectError
542+
mod.ndarray( 10, 0, 1, 1, 1, out, undefined, 0 ); // $ExpectError
543+
mod.ndarray( 10, 0, 1, 1, 1, out, [], 0 ); // $ExpectError
544+
mod.ndarray( 10, 0, 1, 1, 1, out, {}, 0 ); // $ExpectError
545+
mod.ndarray( 10, 0, 1, 1, 1, out, (x: number): number => x, 0 ); // $ExpectError
546+
}
547+
548+
// The compiler throws an error if the `ndarray` method of a module instance is provided a eighth argument which is not a number...
549+
{
550+
const mem = new Memory({ 'initial': 1 });
551+
const mod = dmeanvar.Module( mem );
552+
const out = new Float64Array( 2 );
553+
554+
mod.ndarray( 10, 0, 1, 1, 1, out, 1, '0' ); // $ExpectError
555+
mod.ndarray( 10, 0, 1, 1, 1, out, 1, true ); // $ExpectError
556+
mod.ndarray( 10, 0, 1, 1, 1, out, 1, false ); // $ExpectError
557+
mod.ndarray( 10, 0, 1, 1, 1, out, 1, null ); // $ExpectError
558+
mod.ndarray( 10, 0, 1, 1, 1, out, 1, undefined ); // $ExpectError
559+
mod.ndarray( 10, 0, 1, 1, 1, out, 1, [] ); // $ExpectError
560+
mod.ndarray( 10, 0, 1, 1, 1, out, 1, {} ); // $ExpectError
561+
mod.ndarray( 10, 0, 1, 1, 1, out, 1, (x: number): number => x ); // $ExpectError
494562
}
495563

496564
// The compiler throws an error if the `ndarray` method of a module instance is provided an unsupported number of arguments...
497565
{
498566
const mem = new Memory({ 'initial': 1 });
499567
const mod = dmeanvar.Module( mem );
568+
const out = new Float64Array( 2 );
500569

501570
mod.ndarray(); // $ExpectError
502571
mod.ndarray( 10 ); // $ExpectError
503572
mod.ndarray( 10, 0 ); // $ExpectError
504-
mod.ndarray( 10, 0, 1 ); // $ExpectError
573+
mod.ndarray( 10, 0, 1, 0 ); // $ExpectError
505574
mod.ndarray( 10, 0, 1, 0, 10 ); // $ExpectError
575+
mod.ndarray( 10, 0, 1, 0, 10, out ); // $ExpectError
576+
mod.ndarray( 10, 0, 1, 0, 10, out, 0 ); // $ExpectError
577+
mod.ndarray( 10, 0, 1, 0, 10, out, 0, 1, 1 ); // $ExpectError
506578
}

lib/node_modules/@stdlib/stats/strided/wasm/dmeanvar/examples/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ function main() {
4343
var bool = ( v === out );
4444

4545
// Print the result:
46-
console.log( bool );
46+
console.log( dmeanvar.main( N, 1, x, 1, out, 1 ) );
47+
console.log(out);
48+
console.log(bool);
4749
}
4850

4951
main();

lib/node_modules/@stdlib/stats/strided/wasm/dmeanvar/lib/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
* var Memory = require( '@stdlib/wasm/memory' );
5656
* var oneTo = require( '@stdlib/array/one-to' );
5757
* var Float64Array = require( '@stdlib/array/float64' );
58+
* var dmeanvar = require( '@stdlib/stats/strided/wasm/dmeanvar' );
5859
*
5960
* // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB):
6061
* var mem = new Memory({

lib/node_modules/@stdlib/stats/strided/wasm/dmeanvar/lib/module.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-propert
2727
var inherits = require( '@stdlib/utils/inherit' );
2828
var WasmModule = require( '@stdlib/wasm/module-wrapper' );
2929
var format = require( '@stdlib/string/format' );
30-
var wasmBinary = require( '@stdlib/stats/strided/wasm/dmeanvar/lib/binary.js' );
30+
var wasmBinary = require( './binary.js' );
3131

3232

3333
// MAIN //
@@ -43,6 +43,7 @@ var wasmBinary = require( '@stdlib/stats/strided/wasm/dmeanvar/lib/binary.js' );
4343
* @example
4444
* var Memory = require( '@stdlib/wasm/memory' );
4545
* var oneTo = require( '@stdlib/array/one-to' );
46+
* var dmeanvar = require( '@stdlib/stats/strided/wasm/dmeanvar' );
4647
* var Float64Array = require( '@stdlib/array/float64' );
4748
*
4849
* // Create a new memory instance with an initial size of 10 pages (640KiB) and a maximum size of 100 pages (6.4MiB):
@@ -150,11 +151,11 @@ inherits( Module, WasmModule );
150151
* // returns <Float64Array>[ 2.0, 1.0 ]
151152
*/
152153
setReadOnly( Module.prototype, 'main', function dmeanvar( N, correction, xptr, strideX, out, strideOut ) {
153-
return this._instance.exports.stdlib_strided_dmeanvar( N, correction, xptr, strideX, out, strideOut );
154+
return this._instance.exports.stdlib_strided_dmeanvar( N, correction, xptr, strideX, out, strideOut ); // eslint-disable-line max-len
154155
});
155156

156157
/**
157-
* Computes the arithmetic mean of a double-precision floating-point strided array using Welford's algorithm and alternative indexing semantics.
158+
* Computes the mean and variance of a double-precision floating-point strided array using alternative indexing semantics.
158159
*
159160
* @name ndarray
160161
* @memberof Module.prototype

lib/node_modules/@stdlib/stats/strided/wasm/dmeanvar/lib/routine.js

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -91,16 +91,19 @@ function Routine() {
9191
inherits( Routine, Module );
9292

9393
/**
94-
* Computes the arithmetic mean of a double-precision floating-point strided array using Welford's algorithm.
94+
* Computes the mean and variance of a double-precision floating-point strided array.
9595
*
9696
* @name main
9797
* @memberof Routine.prototype
9898
* @readonly
9999
* @type {Function}
100100
* @param {PositiveInteger} N - number of indexed elements
101+
* @param {PositiveNumber} correction - degrees of freedom adjustment
101102
* @param {Float64Array} x - input array
102103
* @param {integer} strideX - stride length
103-
* @returns {number} arithmetic mean
104+
* @param {Float64Array} out - output array
105+
* @param {integer} strideOut - `out` stride length
106+
* @returns {Float64Array} output array
104107
*
105108
* @example
106109
* var Float64Array = require( '@stdlib/array/float64' );
@@ -113,27 +116,32 @@ inherits( Routine, Module );
113116
*
114117
* // Define a strided array:
115118
* var x = new Float64Array( [ 1.0, -2.0, 2.0 ] );
119+
* var out = new Float64Array( 2 );
116120
*
117121
* // Perform operation:
118-
* var v = dmeanvar.main( 3, x, 1 );
119-
* // returns ~0.3333
122+
* var v = dmeanvar.main( 3, 1, x, 1, out, 1 );
123+
* // returns <Float64Array>[ ~0.3333, ~4.3333 ]
120124
*/
121-
setReadOnly( Routine.prototype, 'main', function dmeanvar( N, x, strideX ) {
122-
return this.ndarray( N, x, strideX, stride2offset( N, strideX ) );
125+
setReadOnly( Routine.prototype, 'main', function dmeanvar( N, correction, x, strideX, out, strideOut ) {
126+
return this.ndarray( N, correction, x, strideX, stride2offset( N, strideX ), out, strideOut, stride2offset( N, strideOut ) );
123127
});
124128

125129
/**
126-
* Computes the arithmetic mean of a double-precision floating-point strided array using Welford's algorithm and alternative indexing semantics.
130+
* Computes the mean and variance of a double-precision floating-point strided array using alternative indexing semantics.
127131
*
128132
* @name ndarray
129133
* @memberof Routine.prototype
130134
* @readonly
131135
* @type {Function}
132136
* @param {PositiveInteger} N - number of indexed elements
137+
* @param {PositiveNumber} correction - degrees of freedom adjustment
133138
* @param {Float64Array} x - input array
134139
* @param {integer} strideX - stride length
135140
* @param {NonNegativeInteger} offsetX - starting index
136-
* @returns {number} arithmetic mean
141+
* @param {Float64Array} out - output array
142+
* @param {integer} strideOut - `out` stride length
143+
* @param {NonNegativeInteger} offsetOut - `out` starting index
144+
* @returns {Float64Array} output array
137145
*
138146
* @example
139147
* var Float64Array = require( '@stdlib/array/float64' );
@@ -147,11 +155,14 @@ setReadOnly( Routine.prototype, 'main', function dmeanvar( N, x, strideX ) {
147155
* // Define a strided array:
148156
* var x = new Float64Array( [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0 ] );
149157
*
158+
* // Allocate space for the output:
159+
* var out = new Float64Array( 2 );
160+
*
150161
* // Perform operation:
151-
* var v = dmeanvar.ndarray( 4, x, 2, 1 );
152-
* // returns 1.25
162+
* var v = dmeanvar.ndarray( 4, 1, x, 2, 1, out, 1, 0 );
163+
* // returns <Float64Array>[ 1.25, 6.25 ]
153164
*/
154-
setReadOnly( Routine.prototype, 'ndarray', function dmeanvar( N, x, strideX, offsetX ) {
165+
setReadOnly( Routine.prototype, 'ndarray', function dmeanvar( N, correction, x, strideX, offsetX, out, strideOut, offsetOut ) {
155166
var ptrs;
156167
var p0;
157168

@@ -162,7 +173,7 @@ setReadOnly( Routine.prototype, 'ndarray', function dmeanvar( N, x, strideX, off
162173
p0 = ptrs[ 0 ];
163174

164175
// Perform computation by calling the corresponding parent method:
165-
return Module.prototype.ndarray.call( this, N, p0.ptr, p0.stride, p0.offset );
176+
return Module.prototype.ndarray.call( this, N, correction, p0.ptr, p0.stride, p0.offset, out, strideOut, offsetOut );
166177
});
167178

168179

lib/node_modules/@stdlib/stats/strided/wasm/dmeanvar/test/test.main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ var dmeanvar = require( './../lib' );
3030

3131
tape( 'main export is an object', function test( t ) {
3232
t.ok( true, __filename );
33-
t.strictEqual( typeof dmeanvar.main, 'object', 'main export is an object' );
33+
t.strictEqual( typeof dmeanvar, 'object', 'main export is an object' );
3434
t.end();
3535
});
3636

lib/node_modules/@stdlib/stats/strided/wasm/dmeanvar/test/test.module.main.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -346,10 +346,10 @@ tape( 'if provided a `stride` parameter equal to `0`, a module instance has a `m
346346
tape( 'a module instance has a `main` method which supports view offsets', function test( t ) {
347347
var expected0;
348348
var expected1;
349-
var mem;
350-
var mod;
351349
var out0;
352350
var out1;
351+
var mem;
352+
var mod;
353353
var xp;
354354
var y;
355355

0 commit comments

Comments
 (0)