From 6ca0f642eddc95228622fb5402f8f097e8484525 Mon Sep 17 00:00:00 2001 From: stdlib-bot <82920195+stdlib-bot@users.noreply.github.com> Date: Sun, 28 Jan 2024 08:31:01 +0000 Subject: [PATCH] Update artifacts --- .../tools/binary-factory/coverage.ndjson | 1 + .../strided/tools/binary-factory/index.html | 131 +++ .../tools/binary-factory/index.js.html | 283 +++++++ .../strided/tools/binary-factory/main.js.html | 790 ++++++++++++++++++ .../tools/unary-factory/coverage.ndjson | 1 + random/strided/tools/unary-factory/index.html | 2 +- .../strided/tools/unary-factory/index.js.html | 2 +- .../strided/tools/unary-factory/main.js.html | 2 +- 8 files changed, 1209 insertions(+), 3 deletions(-) create mode 100644 random/strided/tools/binary-factory/coverage.ndjson create mode 100644 random/strided/tools/binary-factory/index.html create mode 100644 random/strided/tools/binary-factory/index.js.html create mode 100644 random/strided/tools/binary-factory/main.js.html diff --git a/random/strided/tools/binary-factory/coverage.ndjson b/random/strided/tools/binary-factory/coverage.ndjson new file mode 100644 index 000000000..c8c9e38bb --- /dev/null +++ b/random/strided/tools/binary-factory/coverage.ndjson @@ -0,0 +1 @@ +[146,301,48.505,2,2,100,0,1,0,146,301,48.505,"a819a665f4dde45102f4e265d2619ae7520a54b0","2024-01-28 00:28:01 -0800"] diff --git a/random/strided/tools/binary-factory/index.html b/random/strided/tools/binary-factory/index.html new file mode 100644 index 000000000..92f5f941c --- /dev/null +++ b/random/strided/tools/binary-factory/index.html @@ -0,0 +1,131 @@ + + + + +
++ Press n or j to go to the next uncovered block, b, p or k for the previous block. +
+ ++ 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 | 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'; + +/** +* Create a factory function for filling strided arrays with pseudorandom values drawn from a binary PRNG. +* +* @module @stdlib/random/strided/tools/binary-factory +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var arcsine = require( '@stdlib/random/base/arcsine' ); +* var binaryFactory = require( '@stdlib/random/strided/tools/binary-factory' ); +* +* var factory = createFactory( arcsine ); +* // returns <Function> +* +* var random = factory(); +* // returns <Function> +* +* var out = new Float64Array( 10 ); +* // returns <Float64Array> +* +* random( out.length, [ 2.0 ], 0, [ 5.0 ], 0, out, 1 ); +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var arcsine = require( '@stdlib/random/base/arcsine' ); +* var binaryFactory = require( '@stdlib/random/strided/tools/binary-factory' ); +* +* var factory = createFactory( arcsine ); +* // 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, out, 1, 0 ); +*/ + +// MODULES // + +var main = require( './main.js' ); + + +// EXPORTS // + +module.exports = main; + |
+ 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 | 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 +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 binary = require( '@stdlib/strided/base/binary' ); +var format = require( '@stdlib/string/format' ); + + +// MAIN // + +/** +* Returns a factory function for filling strided arrays with pseudorandom values drawn from a binary PRNG. +* +* @param {Function} prng - binary pseudorandom value generator +* @param {Function} prng.factory - method which returns a new binary 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 arcsine = require( '@stdlib/random/base/arcsine' ); +* +* var factory = createFactory( arcsine ); +* // returns <Function> +* +* var random = factory(); +* // returns <Function> +* +* var out = new Float64Array( 10 ); +* // returns <Float64Array> +* +* random( out.length, [ 2.0 ], 0, [ 5.0 ], 0, out, 1 ); +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var arcsine = require( '@stdlib/random/base/arcsine' ); +* +* var factory = createFactory( arcsine ); +* // 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, 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} out - output array + * @param {integer} so - output array stride length + * @returns {Collection} output array + */ + function rand( N, param1, sp1, param2, sp2, out, so ) { + binary( [ param1, param2, out ], [ N ], [ sp1, sp2, so ], base ); + 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} 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, out, so, oo ) { + binary.ndarray( [ param1, param2, out ], [ N ], [ sp1, sp2, so ], [ op1, op2, 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; + |