diff --git a/CHANGELOG.md b/CHANGELOG.md index ce3a8791..1bf9790c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,12 +4,57 @@
-## Unreleased (2024-09-08) +## Unreleased (2024-09-09)
### Packages +
+ +#### [@stdlib/ndarray/base/assert](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/assert) + +
+ +
+ +##### Features + +- [`98e4809`](https://github.com/stdlib-js/stdlib/commit/98e480997058c3f21d3016b97d25f4c4e62231b9) - add `isBooleanDataType` to namespace +- [`3e7f2ca`](https://github.com/stdlib-js/stdlib/commit/3e7f2ca3c987040575b732129281c384c453e0b8) - add `hasEqualShape` to namespace + +
+ + + +
+ +
+ + + +
+ +#### [@stdlib/ndarray/base/assert/has-equal-shape](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/assert/has-equal-shape) + +
+ +
+ +##### Features + +- [`6e74647`](https://github.com/stdlib-js/stdlib/commit/6e74647839e3ca184dd7df80df9bd0ede9505469) - add `ndarray/base/assert/has-equal-shape` + +
+ + + +
+ +
+ + +
#### [@stdlib/ndarray/base/fill](https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/fill) @@ -100,6 +145,9 @@ A total of 3 people contributed to this release. Thank you to the following cont
+- [`98e4809`](https://github.com/stdlib-js/stdlib/commit/98e480997058c3f21d3016b97d25f4c4e62231b9) - **feat:** add `isBooleanDataType` to namespace _(by Athan Reines)_ +- [`3e7f2ca`](https://github.com/stdlib-js/stdlib/commit/3e7f2ca3c987040575b732129281c384c453e0b8) - **feat:** add `hasEqualShape` to namespace _(by Athan Reines)_ +- [`6e74647`](https://github.com/stdlib-js/stdlib/commit/6e74647839e3ca184dd7df80df9bd0ede9505469) - **feat:** add `ndarray/base/assert/has-equal-shape` _(by Athan Reines)_ - [`5debe82`](https://github.com/stdlib-js/stdlib/commit/5debe8216a1449be68fad01af52d896e63163191) - **test:** add tests to `ndarray/base/map` [(#2810)](https://github.com/stdlib-js/stdlib/pull/2810) _(by Muhammad Haris, Athan Reines)_ - [`0c5f1bc`](https://github.com/stdlib-js/stdlib/commit/0c5f1bc12678832bf4aafddbf2a960e98612327b) - **chore:** rename folder from benchmarks to benchmark _(by Philipp Burckhardt)_ - [`6a6bc1d`](https://github.com/stdlib-js/stdlib/commit/6a6bc1da925c3c3f24463cf0d381d0d38e84868b) - **feat:** add `ndarray/base/fill` [(#2817)](https://github.com/stdlib-js/stdlib/pull/2817) _(by Muhammad Haris, Athan Reines)_ diff --git a/base/assert/has-equal-shape/README.md b/base/assert/has-equal-shape/README.md new file mode 100644 index 00000000..40604a23 --- /dev/null +++ b/base/assert/has-equal-shape/README.md @@ -0,0 +1,120 @@ + + +# hasEqualShape + +> Test if two ndarrays have the same shape. + + + +
+ +
+ + + + + +
+ +## Usage + +```javascript +var hasEqualShape = require( '@stdlib/ndarray/base/assert/has-equal-shape' ); +``` + +#### hasEqualShape( x, y ) + +Tests if two ndarrays have the same shape. + +```javascript +var array = require( '@stdlib/ndarray/array' ); + +var x = array( [ 1, 2, 3, 4 ] ); +var y = array( [ 5, 6, 7, 8 ] ); + +var bool = hasEqualShape( x, y ); +// returns true +``` + +
+ + + + + +
+ +
+ + + + + +
+ +## Examples + + + +```javascript +var array = require( '@stdlib/ndarray/array' ); +var hasEqualShape = require( '@stdlib/ndarray/base/assert/has-equal-shape' ); + +var x1 = array( [ [ 1, 2 ], [ 3, 4 ] ] ); +var y1 = array( [ [ 5, 6 ], [ 7, 8 ] ] ); + +var bool = hasEqualShape( x1, y1 ); +// returns true + +var x2 = array( [ [ 1, 2 ], [ 3, 4 ] ] ); +var y2 = array( [ [ 5, 6 ], [ 7, 8 ], [ 9, 10 ] ] ); + +bool = hasEqualShape( x2, y2 ); +// returns false +``` + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + diff --git a/base/assert/has-equal-shape/benchmark/benchmark.js b/base/assert/has-equal-shape/benchmark/benchmark.js new file mode 100644 index 00000000..623253d6 --- /dev/null +++ b/base/assert/has-equal-shape/benchmark/benchmark.js @@ -0,0 +1,86 @@ +/** +* @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 bench = require( '@stdlib/bench' ); +var isBoolean = require( '@stdlib/assert/is-boolean' ).isPrimitive; +var array = require( './../../../../array' ); +var pkg = require( './../package.json' ).name; +var hasEqualShape = require( './../lib' ); + + +// MAIN // + +bench( pkg+'::true', function benchmark( b ) { + var values; + var out; + var v; + var i; + + values = [ + array( [ [ 1, 2 ], [ 3, 4 ] ] ), + array( [ [ 1, 2 ], [ 3, 4 ] ] ) + ]; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + v = values[ i%values.length ]; + out = hasEqualShape( v, v ); + if ( typeof out !== 'boolean' ) { + b.fail( 'should return a boolean' ); + } + } + b.toc(); + if ( !isBoolean( out ) ) { + b.fail( 'should return a boolean' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( pkg+'::false', function benchmark( b ) { + var values; + var out; + var v1; + var v2; + var i; + + values = [ + array( [ [ 1, 2 ], [ 3, 4 ] ] ), + array( [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ] ) + ]; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + v1 = values[ i%values.length ]; + v2 = values[ (i+1)%values.length ]; + out = hasEqualShape( v1, v2 ); + if ( typeof out !== 'boolean' ) { + b.fail( 'should return a boolean' ); + } + } + b.toc(); + if ( !isBoolean( out ) ) { + b.fail( 'should return a boolean' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); diff --git a/base/assert/has-equal-shape/docs/repl.txt b/base/assert/has-equal-shape/docs/repl.txt new file mode 100644 index 00000000..714163ff --- /dev/null +++ b/base/assert/has-equal-shape/docs/repl.txt @@ -0,0 +1,27 @@ + +{{alias}}( x, y ) + Tests if two ndarrays have the same shape. + + Parameters + ---------- + x: ndarray + First input ndarray. + + y: ndarray + Second input ndarray. + + Returns + ------- + bool: boolean + Boolean indicating if both ndarrays have the same shape. + + Examples + -------- + > var x = {{alias:@stdlib/ndarray/array}}( [ 1, 2, 3, 4 ] ); + > var y = {{alias:@stdlib/ndarray/array}}( [ 5, 6, 7, 8 ] ); + > var bool = {{alias}}( x, y ) + true + + See Also + -------- + diff --git a/base/assert/has-equal-shape/docs/types/index.d.ts b/base/assert/has-equal-shape/docs/types/index.d.ts new file mode 100644 index 00000000..b50ab216 --- /dev/null +++ b/base/assert/has-equal-shape/docs/types/index.d.ts @@ -0,0 +1,46 @@ +/* +* @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. +*/ + +// TypeScript Version: 4.1 + +/// + +import { ndarray } from '@stdlib/types/ndarray'; + +/** +* Tests whether two ndarrays have the same shape. +* +* @param x - first input ndarray +* @param y - second input ndarray +* @returns boolean indicating whether two ndarrays have the same shape +* +* @example +* var array = require( '@stdlib/ndarray/array' ); +* +* var x = array( [ [ 1, 2 ], [ 3, 4 ] ] ); +* var y = array( [ [ 5, 6 ], [ 7, 8 ] ] ); +* +* var bool = hasEqualShape( x, y ); +* // returns true +*/ +declare function hasEqualShape( x: ndarray, y: ndarray ): boolean; + + +// EXPORTS // + +export = hasEqualShape; diff --git a/base/assert/has-equal-shape/docs/types/test.ts b/base/assert/has-equal-shape/docs/types/test.ts new file mode 100644 index 00000000..d5b5da55 --- /dev/null +++ b/base/assert/has-equal-shape/docs/types/test.ts @@ -0,0 +1,67 @@ +/* +* @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. +*/ + +import array = require( './../../../../../array' ); +import hasEqualShape = require( './index' ); + + +// TESTS // + +// The function returns a boolean... +{ + const x = array( [ [ 1, 2 ], [ 3, 4 ] ] ); + + hasEqualShape( x, x ); // $ExpectType boolean +} + +// The compiler throws an error if the function is provided a first argument which is not an ndarray... +{ + const x = array( [ [ 1, 2 ], [ 3, 4 ] ] ); + + hasEqualShape( '5', x ); // $ExpectError + hasEqualShape( 5, x ); // $ExpectError + hasEqualShape( true, x ); // $ExpectError + hasEqualShape( false, x ); // $ExpectError + hasEqualShape( null, x ); // $ExpectError + hasEqualShape( [], x ); // $ExpectError + hasEqualShape( {}, x ); // $ExpectError + hasEqualShape( ( x: number ): number => x, x ); // $ExpectError +} + +// The compiler throws an error if the function is provided a second argument which is not an ndarray... +{ + const x = array( [ [ 1, 2 ], [ 3, 4 ] ] ); + + hasEqualShape( x, '5' ); // $ExpectError + hasEqualShape( x, 5 ); // $ExpectError + hasEqualShape( x, true ); // $ExpectError + hasEqualShape( x, false ); // $ExpectError + hasEqualShape( x, null ); // $ExpectError + hasEqualShape( x, [] ); // $ExpectError + hasEqualShape( x, {} ); // $ExpectError + hasEqualShape( x, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided an unsupported number of arguments... +{ + const x = array( [ [ 1, 2 ], [ 3, 4 ] ] ); + + hasEqualShape(); // $ExpectError + hasEqualShape( x ); // $ExpectError + hasEqualShape( x, x, {} ); // $ExpectError +} diff --git a/base/assert/has-equal-shape/examples/index.js b/base/assert/has-equal-shape/examples/index.js new file mode 100644 index 00000000..6ec5821e --- /dev/null +++ b/base/assert/has-equal-shape/examples/index.js @@ -0,0 +1,36 @@ +/** +* @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'; + +var array = require( './../../../../array' ); +var hasEqualShape = require( './../lib' ); + +var x1 = array( [ [ 1, 2 ], [ 3, 4 ] ] ); +var y1 = array( [ [ 5, 6 ], [ 7, 8 ] ] ); + +var bool = hasEqualShape( x1, y1 ); +console.log( bool ); +// => true + +var x2 = array( [ [ 1, 2 ], [ 3, 4 ] ] ); +var y2 = array( [ [ 5, 6 ], [ 7, 8 ], [ 9, 10 ] ] ); + +bool = hasEqualShape( x2, y2 ); +console.log( bool ); +// => false diff --git a/base/assert/has-equal-shape/lib/index.js b/base/assert/has-equal-shape/lib/index.js new file mode 100644 index 00000000..96eb3040 --- /dev/null +++ b/base/assert/has-equal-shape/lib/index.js @@ -0,0 +1,44 @@ +/** +* @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'; + +/** +* Test whether two ndarrays have the same shape. +* +* @module @stdlib/ndarray/base/assert/has-equal-shape +* +* @example +* var array = require( '@stdlib/ndarray/array' ); +* var hasEqualShape = require( '@stdlib/ndarray/base/assert/has-equal-shape' ); +* +* var x = array( [ 1, 2, 3, 4 ] ); +* var y = array( [ 5, 6, 7, 8 ] ); +* +* var bool = hasEqualShape( x, y ); +* // returns true +*/ + +// MODULES // + +var main = require( './main.js' ); + + +// EXPORTS // + +module.exports = main; diff --git a/base/assert/has-equal-shape/lib/main.js b/base/assert/has-equal-shape/lib/main.js new file mode 100644 index 00000000..4477d5f4 --- /dev/null +++ b/base/assert/has-equal-shape/lib/main.js @@ -0,0 +1,65 @@ +/** +* @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 shape = require( './../../../../base/shape' ); + + +// MAIN // + +/** +* Tests whether two ndarrays have the same shape. +* +* @param {ndarray} x - first input ndarray +* @param {ndarray} y - second input ndarray +* @returns {boolean} boolean indicating whether two ndarrays have the same shape +* +* @example +* var array = require( '@stdlib/ndarray/array' ); +* +* var x = array( [ 1, 2, 3, 4 ] ); +* var y = array( [ 5, 6, 7, 8 ] ); +* +* var bool = hasEqualShape( x, y ); +* // returns true +*/ +function hasEqualShape( x, y ) { + var xsh; + var ysh; + var i; + + xsh = shape( x, false ); + ysh = shape( y, false ); + if ( xsh.length !== ysh.length ) { + return false; + } + for ( i = 0; i < xsh.length; i++ ) { + if ( xsh[ i ] !== ysh[ i ] ) { + return false; + } + } + return true; +} + + +// EXPORTS // + +module.exports = hasEqualShape; diff --git a/base/assert/has-equal-shape/package.json b/base/assert/has-equal-shape/package.json new file mode 100644 index 00000000..da7c5237 --- /dev/null +++ b/base/assert/has-equal-shape/package.json @@ -0,0 +1,71 @@ +{ + "name": "@stdlib/ndarray/base/assert/has-equal-shape", + "version": "0.0.0", + "description": "Test if two ndarrays have the same shape.", + "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", + "stdtypes", + "types", + "base", + "ndarray", + "multidimensional", + "array", + "utilities", + "utility", + "utils", + "util", + "assert", + "test", + "check", + "is", + "equal", + "shape" + ], + "__stdlib__": {} +} diff --git a/base/assert/has-equal-shape/test/test.js b/base/assert/has-equal-shape/test/test.js new file mode 100644 index 00000000..402bf28f --- /dev/null +++ b/base/assert/has-equal-shape/test/test.js @@ -0,0 +1,69 @@ +/** +* @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. +*/ + +/* eslint-disable max-len */ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var array = require( './../../../../array' ); +var hasEqualShape = require( './../lib' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof hasEqualShape, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function returns `true` if provided two ndarrays having the same shape', function test( t ) { + var values; + var bool; + var i; + + values = [ + [ array( [ 1, 2, 3, 4 ] ), array( [ 5, 6, 7, 8 ] ) ], + [ array( [ [ 1, 2 ], [ 3, 4 ] ] ), array( [ [ 5, 6 ], [ 7, 8 ] ] ) ] + ]; + for ( i = 0; i < values.length; i++ ) { + bool = hasEqualShape( values[ i ][ 0 ], values[ i ][ 1 ] ); + t.strictEqual( bool, true, 'returns expected value when provided '+values[ i ] ); + } + t.end(); +}); + +tape( 'the function returns `false` if not provided two ndarrays having the same shape', function test( t ) { + var values; + var bool; + var i; + + values = [ + [ array( [ 1, 2, 3, 4 ] ), array( [ 1, 2, 3 ] ) ], + [ array( [ [ 1, 2 ], [ 3, 4 ] ] ), array( [ 1, 2, 3, 4 ] ) ], + [ array( [ [ 1, 2 ], [ 3, 4 ] ] ), array( [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ] ) ] + ]; + for ( i = 0; i < values.length; i++ ) { + bool = hasEqualShape( values[ i ][ 0 ], values[ i ][ 1 ] ); + t.strictEqual( bool, false, 'returns expected value when provided '+values[ i ] ); + } + t.end(); +}); diff --git a/base/assert/lib/index.js b/base/assert/lib/index.js index 6885d662..33099e6c 100644 --- a/base/assert/lib/index.js +++ b/base/assert/lib/index.js @@ -36,6 +36,15 @@ var setReadOnly = require( '@stdlib/utils/define-read-only-property' ); */ var ns = {}; +/** +* @name hasEqualShape +* @memberof ns +* @readonly +* @type {Function} +* @see {@link module:@stdlib/ndarray/base/assert/has-equal-shape} +*/ +setReadOnly( ns, 'hasEqualShape', require( './../../../base/assert/has-equal-shape' ) ); + /** * @name isAllowedDataTypeCast * @memberof ns @@ -45,6 +54,15 @@ var ns = {}; */ setReadOnly( ns, 'isAllowedDataTypeCast', require( './../../../base/assert/is-allowed-data-type-cast' ) ); +/** +* @name isBooleanDataType +* @memberof ns +* @readonly +* @type {Function} +* @see {@link module:@stdlib/ndarray/base/assert/is-boolean-data-type} +*/ +setReadOnly( ns, 'isBooleanDataType', require( './../../../base/assert/is-boolean-data-type' ) ); + /** * @name isBufferLengthCompatible * @memberof ns