diff --git a/random/strided/tools/coverage.ndjson b/random/strided/tools/coverage.ndjson index acf3d9913..41e8c32a9 100644 --- a/random/strided/tools/coverage.ndjson +++ b/random/strided/tools/coverage.ndjson @@ -1 +1,2 @@ [60,60,100,1,1,100,0,0,100,60,60,100,"1db2872f8fc0d16b9a0c164605a7ebe3c4a243c2","2024-01-28 00:44:43 -0800"] +[69,69,100,1,1,100,0,0,100,69,69,100,"400646c1420098c0415ab63b00c14f37bd0163d7","2024-01-28 01:01:02 -0800"] diff --git a/random/strided/tools/index.html b/random/strided/tools/index.html index 607c657fb..183efa65d 100644 --- a/random/strided/tools/index.html +++ b/random/strided/tools/index.html @@ -25,7 +25,7 @@

All files random/strided/tools/lib

100% Statements - 60/60 + 69/69
@@ -46,7 +46,7 @@

All files random/strided/tools/lib

100% Lines - 60/60 + 69/69
@@ -84,13 +84,13 @@

All files random/strided/tools/lib

100% - 60/60 + 69/69 100% 1/1 100% 0/0 100% - 60/60 + 69/69 @@ -101,7 +101,7 @@

All files random/strided/tools/lib

+ + + + + + \ No newline at end of file diff --git a/random/strided/tools/ternary-factory/index.js.html b/random/strided/tools/ternary-factory/index.js.html new file mode 100644 index 000000000..50a8c4e58 --- /dev/null +++ b/random/strided/tools/ternary-factory/index.js.html @@ -0,0 +1,283 @@ + + + + + + Code coverage report for random/strided/tools/ternary-factory/lib/index.js + + + + + + + + + +
+
+

All files / random/strided/tools/ternary-factory/lib index.js

+
+ +
+ 100% + Statements + 66/66 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 100% + Functions + 0/0 +
+ + +
+ 100% + Lines + 66/66 +
+ + +
+

+ 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 +671x +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) 2024 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';
+ 
+/**
+* Create a factory function for filling strided arrays with pseudorandom values drawn from a ternary PRNG.
+*
+* @module @stdlib/random/strided/tools/ternary-factory
+*
+* @example
+* var Float64Array = require( '@stdlib/array/float64' );
+* var triangular = require( '@stdlib/random/base/triangular' );
+* var ternaryFactory = require( '@stdlib/random/strided/tools/ternary-factory' );
+*
+* var factory = createFactory( triangular );
+* // returns <Function>
+*
+* var random = factory();
+* // returns <Function>
+*
+* var out = new Float64Array( 10 );
+* // returns <Float64Array>
+*
+* random( out.length, [ 2.0 ], 0, [ 5.0 ], 0, [ 3.0 ], 0, out, 1 );
+*
+* @example
+* var Float64Array = require( '@stdlib/array/float64' );
+* var triangular = require( '@stdlib/random/base/triangular' );
+* var ternaryFactory = require( '@stdlib/random/strided/tools/ternary-factory' );
+*
+* var factory = createFactory( triangular );
+* // returns <Function>
+*
+* var random = factory();
+* // returns <Function>
+*
+* var out = new Float64Array( 10 );
+* // returns <Float64Array>
+*
+* random.ndarray( out.length, [ 2.0 ], 0, 0, [ 5.0 ], 0, 0, [ 3.0 ], 0, 0, out, 1, 0 );
+*/
+ 
+// MODULES //
+ 
+var main = require( './main.js' );
+ 
+ 
+// EXPORTS //
+ 
+module.exports = main;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file diff --git a/random/strided/tools/ternary-factory/main.js.html b/random/strided/tools/ternary-factory/main.js.html new file mode 100644 index 000000000..604e9a9ea --- /dev/null +++ b/random/strided/tools/ternary-factory/main.js.html @@ -0,0 +1,805 @@ + + + + + + Code coverage report for random/strided/tools/ternary-factory/lib/main.js + + + + + + + + + +
+
+

All files / random/strided/tools/ternary-factory/lib main.js

+
+ +
+ 33.33% + Statements + 80/240 +
+ + +
+ 100% + Branches + 1/1 +
+ + +
+ 0% + Functions + 0/1 +
+ + +
+ 33.33% + Lines + 80/240 +
+ + +
+

+ 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 +99 +100 +101 +102 +103 +104 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +2411x +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) 2024 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 setReadWriteAccessor = require( '@stdlib/utils/define-nonenumerable-read-write-accessor' );
+var setReadOnlyAccessor = require( '@stdlib/utils/define-nonenumerable-read-only-accessor' );
+var setReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' );
+var isFunction = require( '@stdlib/assert/is-function' );
+var isMethodIn = require( '@stdlib/assert/is-method-in' );
+var isPlainObject = require( '@stdlib/assert/is-plain-object' );
+var constantFunction = require( '@stdlib/utils/constant-function' );
+var noop = require( '@stdlib/utils/noop' );
+var ternary = require( '@stdlib/strided/base/ternary' );
+var format = require( '@stdlib/string/format' );
+ 
+ 
+// MAIN //
+ 
+/**
+* Returns a factory function for filling strided arrays with pseudorandom values drawn from a ternary PRNG.
+*
+* @param {Function} prng - ternary pseudorandom value generator
+* @param {Function} prng.factory - method which returns a new ternary pseudorandom value generator
+* @throws {TypeError} first argument must be a function
+* @throws {TypeError} first argument must have a `factory` method
+* @returns {Function} function which returns a function for filling strided arrays
+*
+* @example
+* var Float64Array = require( '@stdlib/array/float64' );
+* var triangular = require( '@stdlib/random/base/triangular' );
+*
+* var factory = createFactory( triangular );
+* // returns <Function>
+*
+* var random = factory();
+* // returns <Function>
+*
+* var out = new Float64Array( 10 );
+* // returns <Float64Array>
+*
+* random( out.length, [ 2.0 ], 0, [ 5.0 ], 0, [ 3.0 ], 0, out, 1 );
+*
+* @example
+* var Float64Array = require( '@stdlib/array/float64' );
+* var triangular = require( '@stdlib/random/base/triangular' );
+*
+* var factory = createFactory( triangular );
+* // returns <Function>
+*
+* var random = factory();
+* // returns <Function>
+*
+* var out = new Float64Array( 10 );
+* // returns <Float64Array>
+*
+* random.ndarray( out.length, [ 2.0 ], 0, 0, [ 5.0 ], 0, 0, [ 3.0 ], 0, 0, out, 1, 0 );
+*/
+function createFactory( prng ) {
+	if ( !isFunction( prng ) ) {
+		throw new TypeError( format( 'invalid argument. First argument must be a function. Value: `%s`.', prng ) );
+	}
+	if ( !isMethodIn( prng, 'factory' ) ) {
+		throw new TypeError( format( 'invalid argument. First argument must have a `%s` method.', 'factory' ) );
+	}
+	return factory;
+
+	/**
+	* Returns a function for filling strided arrays with pseudorandom values drawn from a PRNG.
+	*
+	* @private
+	* @param {Options} [options] - function options
+	* @param {PRNG} [options.prng] - pseudorandom number generator which generates uniformly distributed pseudorandom numbers
+	* @param {*} [options.seed] - pseudorandom value generator seed
+	* @param {*} [options.state] - pseudorandom value generator state
+	* @param {boolean} [options.copy] - boolean indicating whether to copy a provided pseudorandom value generator state
+	* @throws {TypeError} options argument must be an object
+	* @throws {TypeError} must provide valid options
+	* @throws {Error} must provide a valid state
+	* @returns {Function} function for filling strided arrays
+	*/
+	function factory() {
+		var base;
+		var opts;
+
+		if ( arguments.length > 0 ) {
+			opts = arguments[ 0 ];
+			if ( !isPlainObject( opts ) ) {
+				throw new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', opts ) );
+			}
+			base = prng.factory( opts );
+		} else {
+			opts = {};
+			base = prng;
+		}
+		if ( opts && opts.prng ) {
+			setReadOnly( rand, 'seed', null );
+			setReadOnly( rand, 'seedLength', null );
+			setReadWriteAccessor( rand, 'state', constantFunction( null ), noop );
+			setReadOnly( rand, 'stateLength', null );
+			setReadOnly( rand, 'byteLength', null );
+		} else {
+			setReadOnlyAccessor( rand, 'seed', getSeed );
+			setReadOnlyAccessor( rand, 'seedLength', getSeedLength );
+			setReadWriteAccessor( rand, 'state', getState, setState );
+			setReadOnlyAccessor( rand, 'stateLength', getStateLength );
+			setReadOnlyAccessor( rand, 'byteLength', getStateSize );
+		}
+		setReadOnly( rand, 'PRNG', base.PRNG );
+		setReadOnly( rand, 'ndarray', ndarray );
+		return rand;
+
+		/**
+		* Fills a strided array with pseudorandom values drawn from a PRNG.
+		*
+		* @private
+		* @param {NonNegativeInteger} N - number of indexed elements
+		* @param {Collection} param1 - first PRNG parameter
+		* @param {integer} sp1 - first PRNG parameter stride length
+		* @param {Collection} param2 - second PRNG parameter
+		* @param {integer} sp2 - second PRNG parameter stride length
+		* @param {Collection} param3 - third PRNG parameter
+		* @param {integer} sp3 - third PRNG parameter stride length
+		* @param {Collection} out - output array
+		* @param {integer} so - output array stride length
+		* @returns {Collection} output array
+		*/
+		function rand( N, param1, sp1, param2, sp2, param3, sp3, out, so ) {
+			ternary( [ param1, param2, param3, out ], [ N ], [ sp1, sp2, sp3, so ], base ); // eslint-disable-line max-len
+			return out;
+		}
+
+		/**
+		* Fills a strided array with pseudorandom values drawn from a PRNG using alternative indexing semantics.
+		*
+		* @private
+		* @param {NonNegativeInteger} N - number of indexed elements
+		* @param {Collection} param1 - first PRNG parameter
+		* @param {integer} sp1 - first PRNG parameter stride length
+		* @param {NonNegativeInteger} op1 - first PRNG parameter starting index
+		* @param {Collection} param2 - second PRNG parameter
+		* @param {integer} sp2 - second PRNG parameter stride length
+		* @param {NonNegativeInteger} op2 - second PRNG parameter starting index
+		* @param {Collection} param3 - third PRNG parameter
+		* @param {integer} sp3 - third PRNG parameter stride length
+		* @param {NonNegativeInteger} op3 - third PRNG parameter starting index
+		* @param {Collection} out - output array
+		* @param {integer} so - output array stride length
+		* @param {NonNegativeInteger} oo - output array starting index
+		* @returns {Collection} output array
+		*/
+		function ndarray( N, param1, sp1, op1, param2, sp2, op2, param3, sp3, op3, out, so, oo ) { // eslint-disable-line max-len, max-params
+			ternary.ndarray( [ param1, param2, param3, out ], [ N ], [ sp1, sp2, sp3, so ], [ op1, op2, op3, oo ], base ); // eslint-disable-line max-len
+			return out;
+		}
+
+		/**
+		* Returns the PRNG seed.
+		*
+		* @private
+		* @returns {*} seed
+		*/
+		function getSeed() {
+			return rand.PRNG.seed;
+		}
+
+		/**
+		* Returns the PRNG seed length.
+		*
+		* @private
+		* @returns {PositiveInteger} seed length
+		*/
+		function getSeedLength() {
+			return rand.PRNG.seedLength;
+		}
+
+		/**
+		* Returns the PRNG state length.
+		*
+		* @private
+		* @returns {PositiveInteger} state length
+		*/
+		function getStateLength() {
+			return rand.PRNG.stateLength;
+		}
+
+		/**
+		* Returns the PRNG state size (in bytes).
+		*
+		* @private
+		* @returns {PositiveInteger} state size (in bytes)
+		*/
+		function getStateSize() {
+			return rand.PRNG.byteLength;
+		}
+
+		/**
+		* Returns the current pseudorandom number generator state.
+		*
+		* @private
+		* @returns {*} current state
+		*/
+		function getState() {
+			return rand.PRNG.state;
+		}
+
+		/**
+		* Sets the pseudorandom number generator state.
+		*
+		* @private
+		* @param {*} s - generator state
+		* @throws {Error} must provide a valid state
+		*/
+		function setState( s ) {
+			rand.PRNG.state = s;
+		}
+	}
+}
+ 
+ 
+// EXPORTS //
+ 
+module.exports = createFactory;
+ 
+ +
+
+ + + + + + + + \ No newline at end of file