diff --git a/lib/node_modules/@stdlib/stats/incr/nanmeanvar/README.md b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/README.md
new file mode 100644
index 000000000000..89a6fa89833d
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/README.md
@@ -0,0 +1,231 @@
+<!--
+
+@license Apache-2.0
+
+Copyright (c) 2025 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.
+
+-->
+
+# incrnanmeanvar
+
+> Compute an [arithmetic mean][arithmetic-mean] and an [unbiased sample variance][sample-variance] incrementally, ignoring `NaN` value.
+
+<section class="intro">
+
+The [arithmetic mean][arithmetic-mean] is defined as
+
+<!-- <equation class="equation" label="eq:arithmetic_mean" align="center" raw="\bar{x} = \frac{1}{n} \sum_{i=0}^{n-1} x_i" alt="Equation for the arithmetic mean."> -->
+
+```math
+\bar{x} = \frac{1}{n} \sum_{i=0}^{n-1} x_i
+```
+
+<!-- <div class="equation" align="center" data-raw-text="\bar{x} = \frac{1}{n} \sum_{i=0}^{n-1} x_i" data-equation="eq:arithmetic_mean">
+    <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@b2df03cb2a582cf1df289c3ddca6922c0db854b4/lib/node_modules/@stdlib/stats/incr/meanvar/docs/img/equation_arithmetic_mean.svg" alt="Equation for the arithmetic mean.">
+    <br>
+</div> -->
+
+<!-- </equation> -->
+
+and the [unbiased sample variance][sample-variance] is defined as
+
+<!-- <equation class="equation" label="eq:unbiased_sample_variance" align="center" raw="s^2 = \frac{1}{n-1} \sum_{i=0}^{n-1} ( x_i - \bar{x} )^2" alt="Equation for the unbiased sample variance."> -->
+
+```math
+s^2 = \frac{1}{n-1} \sum_{i=0}^{n-1} ( x_i - \bar{x} )^2
+```
+
+<!-- <div class="equation" align="center" data-raw-text="s^2 = \frac{1}{n-1} \sum_{i=0}^{n-1} ( x_i - \bar{x} )^2" data-equation="eq:unbiased_sample_variance">
+    <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@eafa6e61d15b7c712c9288d59d8e0e3f0aa6c011/lib/node_modules/@stdlib/stats/incr/meanvar/docs/img/equation_unbiased_sample_variance.svg" alt="Equation for the unbiased sample variance.">
+    <br>
+</div> -->
+
+<!-- </equation> -->
+
+<section class="usage">
+
+## Usage
+
+```javascript
+var incrnanmeanvar = require( '@stdlib/stats/incr/nanmeanvar' );
+```
+
+#### incrnanmeanvar( \[out] )
+
+Returns an accumulator `function` which incrementally computes an [arithmetic mean][arithmetic-mean] and [unbiased sample variance][sample-variance], ignoring `NaN` value.
+
+```javascript
+var accumulator = incrnanmeanvar();
+```
+
+By default, the returned accumulator `function` returns the accumulated values as a two-element `array`. To avoid unnecessary memory allocation, the function supports providing an output (destination) object.
+
+```javascript
+var Float64Array = require( '@stdlib/array/float64' );
+
+var accumulator = incrnanmeanvar( new Float64Array( 2 ) );
+```
+
+#### accumulator( \[x] )
+
+If provided an input value `x`, the accumulator function returns updated accumulated values. If not provided an input value `x`, the accumulator function returns the current accumulated values.
+
+```javascript
+var accumulator = incrnanmeanvar();
+
+var mv = accumulator();
+// returns null
+
+mv = accumulator( 2.0 );
+// returns [ 2.0, 0.0 ]
+
+mv = accumulator( 1.0 );
+// returns [ 1.5, 0.5 ]
+
+mv = accumulator( 3.0 );
+// returns [ 2.0, 1.0 ]
+
+mv = accumulator( NaN );
+// returns [ 2.0, 1.0 ]
+
+mv = accumulator( -7.0 );
+// returns [ -0.25, ~20.92 ]
+
+mv = accumulator( -5.0 );
+// returns [ -1.2, 20.2 ]
+
+mv = accumulator();
+// returns [ -1.2, 20.2 ]
+```
+
+</section>
+
+<!-- /.usage -->
+
+<section class="notes">
+
+## Notes
+
+-   Input values are type checked; if a NaN value is provided, the accumulator skips the update and continues to return the previous state. If non-numeric inputs are possible, you are advised to type check and handle them accordingly **before** passing the value to the accumulator function.
+
+</section>
+
+<!-- /.notes -->
+
+<section class="examples">
+
+## Examples
+
+<!-- eslint no-undef: "error" -->
+
+```javascript
+var randu = require( '@stdlib/random/base/randu' );
+var Float64Array = require( '@stdlib/array/float64' );
+var ArrayBuffer = require( '@stdlib/array/buffer' );
+var incrnanmeanvar = require( '@stdlib/stats/incr/nanmeanvar' );
+
+var offset;
+var acc;
+var buf;
+var out;
+var mv;
+var N;
+var v;
+var i;
+var j;
+
+// Define the number of accumulators:
+N = 5;
+
+// Create an array buffer for storing accumulator output:
+buf = new ArrayBuffer( N*2*8 ); // 8 bytes per element
+
+// Initialize accumulators:
+acc = [];
+for ( i = 0; i < N; i++ ) {
+    // Compute the byte offset:
+    offset = i * 2 * 8; // stride=2, bytes_per_element=8
+
+    // Create a new view for storing accumulated values:
+    out = new Float64Array( buf, offset, 2 );
+
+    // Initialize an accumulator which will write results to the view:
+    acc.push( incrnanmeanvar( out ) );
+}
+
+// Simulate data and update the sample means and variances...
+for ( i = 0; i < 100; i++ ) {
+    for ( j = 0; j < N; j++ ) {
+        if ( randu() < 0.2 ) {
+            v = NaN;
+        } else {
+            v = randu() * 100.0 * (j+1);
+        }
+        acc[ j ]( v );
+    }
+}
+
+// Print the final results:
+console.log( 'Mean\tVariance' );
+for ( i = 0; i < N; i++ ) {
+    mv = acc[ i ]();
+    console.log( '%d\t%d', mv[ 0 ].toFixed( 3 ), mv[ 1 ].toFixed( 3 ) );
+}
+```
+
+</section>
+
+<!-- /.examples -->
+
+<!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. -->
+
+<section class="related">
+
+* * *
+
+## See Also
+
+-   <span class="package-name">[`@stdlib/stats/incr/mean`][@stdlib/stats/incr/mean]</span><span class="delimiter">: </span><span class="description">compute an arithmetic mean incrementally.</span>
+-   <span class="package-name">[`@stdlib/stats/incr/meanstdev`][@stdlib/stats/incr/meanstdev]</span><span class="delimiter">: </span><span class="description">compute an arithmetic mean and corrected sample standard deviation incrementally.</span>
+-   <span class="package-name">[`@stdlib/stats/incr/mmeanvar`][@stdlib/stats/incr/mmeanvar]</span><span class="delimiter">: </span><span class="description">compute a moving arithmetic mean and unbiased sample variance incrementally.</span>
+-   <span class="package-name">[`@stdlib/stats/incr/variance`][@stdlib/stats/incr/variance]</span><span class="delimiter">: </span><span class="description">compute an unbiased sample variance incrementally.</span>
+
+</section>
+
+<!-- /.related -->
+
+<!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
+
+<section class="links">
+
+[arithmetic-mean]: https://en.wikipedia.org/wiki/Arithmetic_mean
+
+[sample-variance]: https://en.wikipedia.org/wiki/Variance
+
+<!-- <related-links> -->
+
+[@stdlib/stats/incr/mean]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/stats/incr/mean
+
+[@stdlib/stats/incr/meanstdev]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/stats/incr/meanstdev
+
+[@stdlib/stats/incr/mmeanvar]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/stats/incr/mmeanvar
+
+[@stdlib/stats/incr/variance]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/stats/incr/variance
+
+<!-- </related-links> -->
+
+</section>
+
+<!-- /.links -->
diff --git a/lib/node_modules/@stdlib/stats/incr/nanmeanvar/benchmark/benchmark.js b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/benchmark/benchmark.js
new file mode 100644
index 000000000000..e3209e9f31d4
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/benchmark/benchmark.js
@@ -0,0 +1,69 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 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 bench = require( '@stdlib/bench' );
+var randu = require( '@stdlib/random/base/randu' );
+var pkg = require( './../package.json' ).name;
+var incrnanmeanvar = require( './../lib' );
+
+
+// MAIN //
+
+bench( pkg, function benchmark( b ) {
+	var f;
+	var i;
+	b.tic();
+	for ( i = 0; i < b.iterations; i++ ) {
+		f = incrnanmeanvar();
+		if ( typeof f !== 'function' ) {
+			b.fail( 'should return a function' );
+		}
+	}
+	b.toc();
+	if ( typeof f !== 'function' ) {
+		b.fail( 'should return a function' );
+	}
+	b.pass( 'benchmark finished' );
+	b.end();
+});
+
+bench( pkg+'::accumulator', function benchmark( b ) {
+	var acc;
+	var v;
+	var i;
+
+	acc = incrnanmeanvar();
+
+	b.tic();
+	for ( i = 0; i < b.iterations; i++ ) {
+		v = acc( randu() );
+		if ( v.length !== 2 ) {
+			b.fail( 'should contain two elements' );
+		}
+	}
+	b.toc();
+	if ( v[ 0 ] !== v[ 0 ] || v[ 1 ] !== v[ 1 ] ) {
+		b.fail( 'should not return NaN' );
+	}
+	b.pass( 'benchmark finished' );
+	b.end();
+});
diff --git a/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/img/equation_arithmetic_mean.svg b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/img/equation_arithmetic_mean.svg
new file mode 100644
index 000000000000..aea7a5f6687a
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/img/equation_arithmetic_mean.svg
@@ -0,0 +1,43 @@
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="12.918ex" height="7.343ex" style="vertical-align: -3.005ex;" viewBox="0 -1867.7 5561.7 3161.4" role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" aria-labelledby="MathJax-SVG-1-Title">
+<title id="MathJax-SVG-1-Title">x overbar equals StartFraction 1 Over n EndFraction sigma-summation Underscript i equals 0 Overscript n minus 1 Endscripts x Subscript i</title>
+<defs aria-hidden="true">
+<path stroke-width="1" id="E1-MJMATHI-78" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-AF" d="M69 544V590H430V544H69Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path>
+<path stroke-width="1" id="E1-MJMATHI-6E" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path>
+<path stroke-width="1" id="E1-MJSZ2-2211" d="M60 948Q63 950 665 950H1267L1325 815Q1384 677 1388 669H1348L1341 683Q1320 724 1285 761Q1235 809 1174 838T1033 881T882 898T699 902H574H543H251L259 891Q722 258 724 252Q725 250 724 246Q721 243 460 -56L196 -356Q196 -357 407 -357Q459 -357 548 -357T676 -358Q812 -358 896 -353T1063 -332T1204 -283T1307 -196Q1328 -170 1348 -124H1388Q1388 -125 1381 -145T1356 -210T1325 -294L1267 -449L666 -450Q64 -450 61 -448Q55 -446 55 -439Q55 -437 57 -433L590 177Q590 178 557 222T452 366T322 544L56 909L55 924Q55 945 60 948Z"></path>
+<path stroke-width="1" id="E1-MJMATHI-69" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path>
+</defs>
+<g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)" aria-hidden="true">
+ <use xlink:href="#E1-MJMATHI-78" x="0" y="0"></use>
+ <use xlink:href="#E1-MJMAIN-AF" x="63" y="7"></use>
+ <use xlink:href="#E1-MJMAIN-3D" x="850" y="0"></use>
+<g transform="translate(1628,0)">
+<g transform="translate(397,0)">
+<rect stroke="none" width="720" height="60" x="0" y="220"></rect>
+ <use xlink:href="#E1-MJMAIN-31" x="110" y="676"></use>
+ <use xlink:href="#E1-MJMATHI-6E" x="60" y="-686"></use>
+</g>
+</g>
+<g transform="translate(3033,0)">
+ <use xlink:href="#E1-MJSZ2-2211" x="0" y="0"></use>
+<g transform="translate(147,-1090)">
+ <use transform="scale(0.707)" xlink:href="#E1-MJMATHI-69" x="0" y="0"></use>
+ <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-3D" x="345" y="0"></use>
+ <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-30" x="1124" y="0"></use>
+</g>
+<g transform="translate(57,1151)">
+ <use transform="scale(0.707)" xlink:href="#E1-MJMATHI-6E" x="0" y="0"></use>
+ <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-2212" x="600" y="0"></use>
+ <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-31" x="1379" y="0"></use>
+</g>
+</g>
+<g transform="translate(4644,0)">
+ <use xlink:href="#E1-MJMATHI-78" x="0" y="0"></use>
+ <use transform="scale(0.707)" xlink:href="#E1-MJMATHI-69" x="809" y="-213"></use>
+</g>
+</g>
+</svg>
\ No newline at end of file
diff --git a/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/img/equation_unbiased_sample_variance.svg b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/img/equation_unbiased_sample_variance.svg
new file mode 100644
index 000000000000..1ae1283e7fb1
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/img/equation_unbiased_sample_variance.svg
@@ -0,0 +1,61 @@
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="24.382ex" height="7.343ex" style="vertical-align: -3.005ex;" viewBox="0 -1867.7 10497.7 3161.4" role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" aria-labelledby="MathJax-SVG-1-Title">
+<title id="MathJax-SVG-1-Title">s squared equals StartFraction 1 Over n minus 1 EndFraction sigma-summation Underscript i equals 0 Overscript n minus 1 Endscripts left-parenthesis x Subscript i Baseline minus x overbar right-parenthesis squared</title>
+<defs aria-hidden="true">
+<path stroke-width="1" id="E1-MJMATHI-73" d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path>
+<path stroke-width="1" id="E1-MJMATHI-6E" d="M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path>
+<path stroke-width="1" id="E1-MJSZ2-2211" d="M60 948Q63 950 665 950H1267L1325 815Q1384 677 1388 669H1348L1341 683Q1320 724 1285 761Q1235 809 1174 838T1033 881T882 898T699 902H574H543H251L259 891Q722 258 724 252Q725 250 724 246Q721 243 460 -56L196 -356Q196 -357 407 -357Q459 -357 548 -357T676 -358Q812 -358 896 -353T1063 -332T1204 -283T1307 -196Q1328 -170 1348 -124H1388Q1388 -125 1381 -145T1356 -210T1325 -294L1267 -449L666 -450Q64 -450 61 -448Q55 -446 55 -439Q55 -437 57 -433L590 177Q590 178 557 222T452 366T322 544L56 909L55 924Q55 945 60 948Z"></path>
+<path stroke-width="1" id="E1-MJMATHI-69" d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path>
+<path stroke-width="1" id="E1-MJMATHI-78" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-AF" d="M69 544V590H430V544H69Z"></path>
+<path stroke-width="1" id="E1-MJMAIN-29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path>
+</defs>
+<g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)" aria-hidden="true">
+ <use xlink:href="#E1-MJMATHI-73" x="0" y="0"></use>
+ <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-32" x="663" y="583"></use>
+ <use xlink:href="#E1-MJMAIN-3D" x="1201" y="0"></use>
+<g transform="translate(1979,0)">
+<g transform="translate(397,0)">
+<rect stroke="none" width="2443" height="60" x="0" y="220"></rect>
+ <use xlink:href="#E1-MJMAIN-31" x="971" y="676"></use>
+<g transform="translate(60,-687)">
+ <use xlink:href="#E1-MJMATHI-6E" x="0" y="0"></use>
+ <use xlink:href="#E1-MJMAIN-2212" x="822" y="0"></use>
+ <use xlink:href="#E1-MJMAIN-31" x="1823" y="0"></use>
+</g>
+</g>
+</g>
+<g transform="translate(5108,0)">
+ <use xlink:href="#E1-MJSZ2-2211" x="0" y="0"></use>
+<g transform="translate(147,-1090)">
+ <use transform="scale(0.707)" xlink:href="#E1-MJMATHI-69" x="0" y="0"></use>
+ <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-3D" x="345" y="0"></use>
+ <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-30" x="1124" y="0"></use>
+</g>
+<g transform="translate(57,1151)">
+ <use transform="scale(0.707)" xlink:href="#E1-MJMATHI-6E" x="0" y="0"></use>
+ <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-2212" x="600" y="0"></use>
+ <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-31" x="1379" y="0"></use>
+</g>
+</g>
+ <use xlink:href="#E1-MJMAIN-28" x="6552" y="0"></use>
+<g transform="translate(6942,0)">
+ <use xlink:href="#E1-MJMATHI-78" x="0" y="0"></use>
+ <use transform="scale(0.707)" xlink:href="#E1-MJMATHI-69" x="809" y="-213"></use>
+</g>
+ <use xlink:href="#E1-MJMAIN-2212" x="8081" y="0"></use>
+<g transform="translate(9081,0)">
+ <use xlink:href="#E1-MJMATHI-78" x="0" y="0"></use>
+ <use xlink:href="#E1-MJMAIN-AF" x="63" y="7"></use>
+</g>
+<g transform="translate(9654,0)">
+ <use xlink:href="#E1-MJMAIN-29" x="0" y="0"></use>
+ <use transform="scale(0.707)" xlink:href="#E1-MJMAIN-32" x="550" y="583"></use>
+</g>
+</g>
+</svg>
\ No newline at end of file
diff --git a/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/repl.txt b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/repl.txt
new file mode 100644
index 000000000000..3b276741410b
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/repl.txt
@@ -0,0 +1,39 @@
+
+{{alias}}( [out] )
+    Returns an accumulator function which incrementally computes an arithmetic
+    mean and unbiased sample variance, ignoring `NaN` value.
+
+    If provided a value, the accumulator function returns updated accumulated
+    values. If not provided a value, the accumulator function returns the
+    current accumulated values.
+
+    If provided `NaN`, the update is skipped and the accumulator continues to
+    return the previous accumulated values.
+
+
+    Parameters
+    ----------
+    out: Array|TypedArray (optional)
+        Output array.
+
+    Returns
+    -------
+    acc: Function
+        Accumulator function.
+
+    Examples
+    --------
+    > var accumulator = {{alias}}();
+    > var mv = accumulator()
+    null
+    > mv = accumulator( 2.0 );
+    > mv = accumulator( -5.0 );
+    > mv = accumulator( 3.0 );
+    > mv = accumulator( NaN );
+    > mv = accumulator( 5.0 );
+    > mv = accumulator()
+    [ 1.25, ~18.92 ]
+
+    See Also
+    --------
+
diff --git a/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/types/index.d.ts b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/types/index.d.ts
new file mode 100644
index 000000000000..23594f6bcdac
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/types/index.d.ts
@@ -0,0 +1,72 @@
+/*
+* @license Apache-2.0
+*
+* Copyright (c) 2025 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.
+*/
+
+// TypeScript Version: 4.1
+
+/// <reference types="@stdlib/types"/>
+
+import { ArrayLike } from '@stdlib/types/array';
+
+/**
+* If provided a value, the accumulator function returns updated results. If not provided a value, the accumulator function returns the current results.
+*
+* ## Notes
+*
+* -   If provided `NaN`, the arithmetic mean and unbiased sample variance values are equal to `NaN` for all future invocations.
+*
+* @param x - input value
+* @returns output array or null
+*/
+type accumulator = ( x?: number ) => ArrayLike<number> | null;
+
+/**
+* Returns an accumulator function which incrementally computes an arithmetic mean and unbiased sample variance, ignoring `NaN` value.
+*
+* @param out - output array
+* @returns accumulator function
+*
+* @example
+* var accumulator = incrnanmeanvar();
+*
+* var mv = accumulator();
+* // returns null
+*
+* mv = accumulator( 2.0 );
+* // returns [ 2.0, 0.0 ]
+*
+* mv = accumulator( -5.0 );
+* // returns [ -1.5, 24.5 ]
+*
+* mv = accumulator( 3.0 );
+* // returns [ 0.0, 19.0 ]
+*
+* mv = accumulator( NaN );
+* // returns [ 0.0, 19.0 ]
+*
+* mv = accumulator( 5.0 );
+* // returns [ 1.25, ~18.92 ]
+*
+* mv = accumulator();
+* // returns [ 1.25, ~18.92 ]
+*/
+declare function incrnanmeanvar( out?: ArrayLike<number> ): accumulator;
+
+
+// EXPORTS //
+
+export = incrnanmeanvar;
diff --git a/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/types/test.ts b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/types/test.ts
new file mode 100644
index 000000000000..37ec2881cb7f
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/docs/types/test.ts
@@ -0,0 +1,61 @@
+/*
+* @license Apache-2.0
+*
+* Copyright (c) 2025 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.
+*/
+
+import incrnanmeanvar = require( './index' );
+
+
+// TESTS //
+
+// The function returns an accumulator function...
+{
+	incrnanmeanvar(); // $ExpectType accumulator
+	const out = [ 0.0, 0.0 ];
+	incrnanmeanvar( out ); // $ExpectType accumulator
+}
+
+// The compiler throws an error if the function is provided an argument that is not an array-like object of numbers...
+{
+	incrnanmeanvar( '5' ); // $ExpectError
+	incrnanmeanvar( 5 ); // $ExpectError
+	incrnanmeanvar( true ); // $ExpectError
+	incrnanmeanvar( false ); // $ExpectError
+	incrnanmeanvar( null ); // $ExpectError
+	incrnanmeanvar( {} ); // $ExpectError
+	incrnanmeanvar( ( x: number ): number => x ); // $ExpectError
+}
+
+// The function returns an accumulator function which returns an accumulated result...
+{
+	const acc = incrnanmeanvar();
+
+	acc(); // $ExpectType ArrayLike<number> | null
+	acc( 3.14 ); // $ExpectType ArrayLike<number> | null
+}
+
+// The compiler throws an error if the returned accumulator function is provided invalid arguments...
+{
+	const acc = incrnanmeanvar();
+
+	acc( '5' ); // $ExpectError
+	acc( true ); // $ExpectError
+	acc( false ); // $ExpectError
+	acc( null ); // $ExpectError
+	acc( [] ); // $ExpectError
+	acc( {} ); // $ExpectError
+	acc( ( x: number ): number => x ); // $ExpectError
+}
diff --git a/lib/node_modules/@stdlib/stats/incr/nanmeanvar/examples/index.js b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/examples/index.js
new file mode 100644
index 000000000000..8420b7ec11c2
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/examples/index.js
@@ -0,0 +1,72 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 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';
+
+var randu = require( '@stdlib/random/base/randu' );
+var Float64Array = require( '@stdlib/array/float64' );
+var ArrayBuffer = require( '@stdlib/array/buffer' );
+var incrnanmeanvar = require( './../lib' );
+
+var offset;
+var acc;
+var buf;
+var out;
+var mv;
+var N;
+var v;
+var i;
+var j;
+
+// Define the number of accumulators:
+N = 5;
+
+// Create an array buffer for storing accumulator output:
+buf = new ArrayBuffer( N*2*8 ); // 8 bytes per element
+
+// Initialize accumulators:
+acc = [];
+for ( i = 0; i < N; i++ ) {
+	// Compute the byte offset:
+	offset = i * 2 * 8; // stride=2, bytes_per_element=8
+
+	// Create a new view for storing accumulated values:
+	out = new Float64Array( buf, offset, 2 );
+
+	// Initialize an accumulator which will write results to the view:
+	acc.push( incrnanmeanvar( out ) );
+}
+
+// Simulate data and update the sample means and variances...
+for ( i = 0; i < 100; i++ ) {
+	for ( j = 0; j < N; j++ ) {
+		if ( randu() < 0.2 ) {
+			v = NaN;
+		} else {
+			v = randu() * 100.0 * (j+1);
+		}
+		acc[ j ]( v );
+	}
+}
+
+// Print the final results:
+console.log( 'Mean\tVariance' );
+for ( i = 0; i < N; i++ ) {
+	mv = acc[ i ]();
+	console.log( '%d\t%d', mv[ 0 ].toFixed( 3 ), mv[ 1 ].toFixed( 3 ) );
+}
diff --git a/lib/node_modules/@stdlib/stats/incr/nanmeanvar/lib/index.js b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/lib/index.js
new file mode 100644
index 000000000000..49e0f7f4d96d
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/lib/index.js
@@ -0,0 +1,60 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 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';
+
+/**
+* Compute an arithmetic mean and unbiased sample variance incrementally.
+*
+* @module @stdlib/stats/incr/nanmeanvar
+*
+* @example
+* var incrnanmeanvar = require( '@stdlib/stats/incr/nanmeanvar' );
+*
+* var accumulator = incrnanmeanvar();
+*
+* var mv = accumulator();
+* // returns null
+*
+* mv = accumulator( 2.0 );
+* // returns [ 2.0, 0.0 ]
+*
+* mv = accumulator( -5.0 );
+* // returns [ -1.5, 24.5 ]
+*
+* mv = accumulator( 3.0 );
+* // returns [ 0.0, 19.0 ]
+*
+* mv = accumulator( NaN );
+* // returns [ 0.0, 19.0 ]
+*
+* mv = accumulator( 5.0 );
+* // returns [ 1.25, ~18.92 ]
+*
+* mv = accumulator();
+* // returns [ 1.25, ~18.92 ]
+*/
+
+// MODULES //
+
+var main = require( './main.js' );
+
+
+// EXPORTS //
+
+module.exports = main;
diff --git a/lib/node_modules/@stdlib/stats/incr/nanmeanvar/lib/main.js b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/lib/main.js
new file mode 100644
index 000000000000..eea3417d971e
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/lib/main.js
@@ -0,0 +1,93 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 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 isNumber = require( '@stdlib/assert/is-number' ).isPrimitive;
+var incrmeanvar = require( '@stdlib/stats/incr/meanvar' );
+var isnan = require( '@stdlib/math/base/assert/is-nan' );
+
+
+// MAIN //
+
+/**
+* Returns an accumulator function which incrementally computes an arithmetic mean and unbiased sample variance, ignoring `NaN` value.
+*
+* ## References
+*
+* -   Welford, B. P. 1962. "Note on a Method for Calculating Corrected Sums of Squares and Products." _Technometrics_ 4 (3). Taylor & Francis: 419–20. doi:[10.1080/00401706.1962.10490022](https://doi.org/10.1080/00401706.1962.10490022).
+* -   van Reeken, A. J. 1968. "Letters to the Editor: Dealing with Neely's Algorithms." _Communications of the ACM_ 11 (3): 149–50. doi:[10.1145/362929.362961](https://doi.org/10.1145/362929.362961).
+*
+* @param {Collection} [out] - output array
+* @throws {TypeError} output argument must be array-like
+* @returns {Function} accumulator function
+*
+* @example
+* var accumulator = incrnanmeanvar();
+*
+* var mv = accumulator();
+* // returns null
+*
+* mv = accumulator( 2.0 );
+* // returns [ 2.0, 0.0 ]
+*
+* mv = accumulator( -5.0 );
+* // returns [ -1.5, 24.5 ]
+*
+* mv = accumulator( 3.0 );
+* // returns [ 0.0, 19.0 ]
+*
+* mv = accumulator( NaN );
+* // returns [ 0.0, 19.0 ]
+*
+* mv = accumulator( 5.0 );
+* // returns [ 1.25, ~18.92 ]
+*
+* mv = accumulator();
+* // returns [ 1.25, ~18.92 ]
+*/
+function incrnanmeanvar( out ) {
+	var meanvar;
+	if ( arguments.length > 0 ) {
+		meanvar = incrmeanvar( out );
+	} else {
+		meanvar = incrmeanvar();
+	}
+	return accumulator;
+
+	/**
+	* If provided a value, the accumulator function returns updated results. If not provided a value, the accumulator function returns the current results.
+	*
+	* @private
+	* @param {number} [x] - input value
+	* @returns {(ArrayLikeObject|null)} output array or null
+	*/
+	function accumulator( x ) {
+		if ( arguments.length === 0 || isnan( x ) || !isNumber( x ) ) {
+			return meanvar();
+		}
+		return meanvar( x );
+	}
+}
+
+
+// EXPORTS //
+
+module.exports = incrnanmeanvar;
diff --git a/lib/node_modules/@stdlib/stats/incr/nanmeanvar/package.json b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/package.json
new file mode 100644
index 000000000000..6c9df94e61e7
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/package.json
@@ -0,0 +1,73 @@
+{
+  "name": "@stdlib/stats/incr/nanmeanvar",
+  "version": "0.0.0",
+  "description": "Compute an arithmetic mean and unbiased sample variance incrementally, ignoring `NaN` value.",
+  "license": "Apache-2.0",
+  "author": {
+    "name": "The Stdlib Authors",
+    "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+  },
+  "contributors": [
+    {
+      "name": "The Stdlib Authors",
+      "url": "https://github.com/stdlib-js/stdlib/graphs/contributors"
+    }
+  ],
+  "main": "./lib",
+  "directories": {
+    "benchmark": "./benchmark",
+    "doc": "./docs",
+    "example": "./examples",
+    "lib": "./lib",
+    "test": "./test"
+  },
+  "types": "./docs/types",
+  "scripts": {},
+  "homepage": "https://github.com/stdlib-js/stdlib",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/stdlib-js/stdlib.git"
+  },
+  "bugs": {
+    "url": "https://github.com/stdlib-js/stdlib/issues"
+  },
+  "dependencies": {},
+  "devDependencies": {},
+  "engines": {
+    "node": ">=0.10.0",
+    "npm": ">2.7.0"
+  },
+  "os": [
+    "aix",
+    "darwin",
+    "freebsd",
+    "linux",
+    "macos",
+    "openbsd",
+    "sunos",
+    "win32",
+    "windows"
+  ],
+  "keywords": [
+    "stdlib",
+    "stdmath",
+    "statistics",
+    "stats",
+    "mathematics",
+    "math",
+    "average",
+    "avg",
+    "mean",
+    "arithmetic mean",
+    "variance",
+    "sample variance",
+    "unbiased",
+    "var",
+    "dispersion",
+    "standard deviation",
+    "stdev",
+    "central tendency",
+    "incremental",
+    "accumulator"
+  ]
+}
diff --git a/lib/node_modules/@stdlib/stats/incr/nanmeanvar/test/test.js b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/test/test.js
new file mode 100644
index 000000000000..aeb4f0065d3f
--- /dev/null
+++ b/lib/node_modules/@stdlib/stats/incr/nanmeanvar/test/test.js
@@ -0,0 +1,203 @@
+/**
+* @license Apache-2.0
+*
+* Copyright (c) 2025 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 tape = require( 'tape' );
+var incrnanmeanvar = require( './../lib' );
+
+
+// TESTS //
+
+tape( 'main export is a function', function test( t ) {
+	t.ok( true, __filename );
+	t.strictEqual( typeof incrnanmeanvar, 'function', 'main export is a function' );
+	t.end();
+});
+
+tape( 'the function throws an error if not provided an array-like object for an output argument', function test( t ) {
+	var values;
+	var i;
+
+	values = [
+		'5',
+		-5.0,
+		true,
+		false,
+		null,
+		void 0,
+		NaN,
+		{},
+		function noop() {}
+	];
+
+	for ( i = 0; i < values.length; i++ ) {
+		t.throws( badValue( values[i] ), TypeError, 'throws an error when provided '+values[i] );
+	}
+	t.end();
+
+	function badValue( value ) {
+		return function badValue() {
+			incrnanmeanvar( value );
+		};
+	}
+});
+
+tape( 'the function returns an accumulator function', function test( t ) {
+	t.equal( typeof incrnanmeanvar(), 'function', 'returns a function' );
+	t.end();
+});
+
+tape( 'the function returns an accumulator function (output)', function test( t ) {
+	t.equal( typeof incrnanmeanvar( [ 0.0, 0.0 ] ), 'function', 'returns a function' );
+	t.end();
+});
+
+tape( 'the accumulator function incrementally computes an arithmetic mean and unbiased sample variance', function test( t ) {
+	var expected;
+	var actual;
+	var data;
+	var acc;
+	var N;
+	var i;
+
+	data = [ 2.0, NaN, 3.0, 2.0, NaN, 4.0, 3.0, 4.0 ];
+	N = data.length;
+
+	// Test against Julia:
+	expected = [
+		[ 2.0, 0.0 ],
+		[ 2.0, 0.0 ],
+		[ 2.5, 0.5 ],
+		[ 7.0/3.0, 0.33333333333333337 ],
+		[ 7.0/3.0, 0.33333333333333337 ],
+		[ 11.0/4.0, 0.9166666666666666 ],
+		[ 14.0/5.0, 0.7 ],
+		[ 18.0/6.0, 0.8 ]
+	];
+
+	acc = incrnanmeanvar();
+
+	for ( i = 0; i < N; i++ ) {
+		actual = acc( data[ i ] );
+		t.deepEqual( actual, expected[ i ], 'returns expected value' );
+	}
+	t.end();
+});
+
+tape( 'the accumulator function incrementally computes an arithmetic mean and unbiased sample variance (output)', function test( t ) {
+	var expected;
+	var actual;
+	var data;
+	var acc;
+	var out;
+	var N;
+	var i;
+
+	data = [ 2.0, NaN, 3.0, 2.0, NaN, 4.0, 3.0, 4.0 ];
+	N = data.length;
+
+	// Test against Julia:
+	expected = [
+		[ 2.0, 0.0 ],
+		[ 2.0, 0.0 ],
+		[ 2.5, 0.5 ],
+		[ 7.0/3.0, 0.33333333333333337 ],
+		[ 7.0/3.0, 0.33333333333333337 ],
+		[ 11.0/4.0, 0.9166666666666666 ],
+		[ 14.0/5.0, 0.7 ],
+		[ 18.0/6.0, 0.8 ]
+	];
+	out = [ 0.0, 0.0 ];
+	acc = incrnanmeanvar( out );
+
+	for ( i = 0; i < N; i++ ) {
+		actual = acc( data[ i ] );
+		t.equal( actual, out, 'returns output array' );
+		t.deepEqual( actual, expected[ i ], 'returns expected value' );
+	}
+	t.end();
+});
+
+tape( 'if not provided an input value, the accumulator function returns the current mean and unbiased sample variance', function test( t ) {
+	var data;
+	var acc;
+	var i;
+
+	data = [ 2.0, 3.0, NaN, 1.0 ];
+	acc = incrnanmeanvar();
+	for ( i = 0; i < data.length; i++ ) {
+		acc( data[ i ] );
+	}
+	t.deepEqual( acc(), [ 2.0, 1.0 ], 'returns expected value' );
+	t.end();
+});
+
+tape( 'if data has yet to be provided, the accumulator function returns `null`', function test( t ) {
+	var acc = incrnanmeanvar();
+	t.equal( acc(), null, 'returns null' );
+	t.equal( acc(), null, 'returns null' );
+	t.equal( acc(), null, 'returns null' );
+	t.end();
+});
+
+tape( 'the sample variance is `0` until at least 2 datums have been provided', function test( t ) {
+	var acc;
+	var mv;
+
+	acc = incrnanmeanvar();
+
+	mv = acc();
+	t.equal( mv, null, 'returns null' );
+
+	mv = acc( 3.0 );
+	t.equal( mv[ 1 ], 0.0, 'returns expected value' );
+
+	mv = acc();
+	t.equal( mv[ 1 ], 0.0, 'returns expected value' );
+
+	mv = acc( 5.0 );
+	t.notEqual( mv[ 1 ], 0.0, 'does not return 0' );
+
+	mv = acc();
+	t.notEqual( mv[ 1 ], 0.0, 'does not return 0' );
+
+	t.end();
+});
+
+tape( 'if the first value is NaN, the accumulator returns its initial state', function test( t ) {
+	var state;
+	var acc;
+
+	acc = incrnanmeanvar();
+
+	// First update is NaN, so no valid update occurs:
+	state = acc( NaN );
+	t.equal( state, null, 'returns null for initial state when first input is NaN' );
+
+	// Subsequent call without an update should still return null:
+	state = acc();
+	t.equal( state, null, 'remains at initial state (null) when no valid update is provided' );
+
+	// Now provide a valid update to see the state change:
+	state = acc( 2.0 );
+	t.deepEqual( state, [ 2.0, 0.0 ], 'updates state correctly after a valid input following an initial NaN' );
+	t.end();
+});