Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add array/base/take-map #1349

Merged
merged 24 commits into from
Mar 6, 2024
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
199641d
Added new example for namespace packages
vr-varad Feb 21, 2024
dd5797f
Added take-map and added namespace new examples
vr-varad Feb 22, 2024
2190f7f
Added take-map and added namespace new examples
vr-varad Feb 22, 2024
3a60341
Merge branch 'develop' of https://github.com/vr-varad/stdlib into dev…
vr-varad Feb 22, 2024
51ab57e
Added take-map and added namespace new examples
vr-varad Feb 22, 2024
7a45086
Added new newspace examples
vr-varad Feb 23, 2024
7214304
added new feature@stdlib/array/base/take-map
vr-varad Feb 23, 2024
7e69c54
All test ok
vr-varad Feb 23, 2024
862542a
made changes
vr-varad Feb 24, 2024
b912605
Refined and checked
vr-varad Feb 24, 2024
8de51ed
fixed error in js examples
vr-varad Feb 24, 2024
98105ea
fixed error in readme and benchmarks
vr-varad Feb 24, 2024
8356c2f
resolved readme reference problem
vr-varad Feb 24, 2024
e958cad
changed according to the lint
vr-varad Feb 24, 2024
02c660c
changed according to the lint
vr-varad Feb 24, 2024
88427f6
made some linting changes
vr-varad Feb 24, 2024
2ba043f
Merge branch 'stdlib-js:develop' into develop
vr-varad Feb 24, 2024
48be856
fix: resolved linting errors
vr-varad Feb 24, 2024
da8703e
fix: errors in ts and js files
vr-varad Feb 25, 2024
db18da9
fix: errors in ts and js files
vr-varad Feb 25, 2024
2a0c8d9
fix: added new clbks
vr-varad Feb 26, 2024
ef66eab
fix: resolved changes
vr-varad Feb 27, 2024
d9079fa
fix: made some changes
vr-varad Mar 2, 2024
e2aeb12
Apply suggestions from code review
Planeshifter Mar 6, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 117 additions & 0 deletions lib/node_modules/@stdlib/array/base/take-map/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
<!--

@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.

-->

# take-map
Planeshifter marked this conversation as resolved.
Show resolved Hide resolved

> Take elements from an array, applies a mapping function using a callback, and returns a new array.
vr-varad marked this conversation as resolved.
Show resolved Hide resolved

<section class="usage">

## Usage

```javascript
var takeMap = require('@stdlib/array/base/take-map');
vr-varad marked this conversation as resolved.
Show resolved Hide resolved
```

### takeMap( x, indices, mode, clbk)
vr-varad marked this conversation as resolved.
Show resolved Hide resolved

Combines the take and map operations into a single API call.
Planeshifter marked this conversation as resolved.
Show resolved Hide resolved
vr-varad marked this conversation as resolved.
Show resolved Hide resolved

```javascript
var takeMap = require('@stdlib/array/base/take-map');
vr-varad marked this conversation as resolved.
Show resolved Hide resolved
var x = [ 1, 2, 3, 4 ];

function customMapping(value) {
Planeshifter marked this conversation as resolved.
Show resolved Hide resolved
return value * 2;
}

var y = takeMap( x, [ 1, 3 ], 'throw', customMapping );
// returns [ 4, 8 ]
```

The function supports the following parameters:

- **x**: input array.
- **indices**: list of indices.
- **mode**: index [mode][@stdlib/ndarray/base/ind].
- **clbk**: function to apply.

vr-varad marked this conversation as resolved.
Show resolved Hide resolved
</section>

<!-- /.usage -->

<section class="notes">

</section>

<!-- /.notes -->

<section class="examples">

## Examples

<!-- eslint no-undef: "error" -->

```javascript
var takeMap = require('@stdlib/array/base/take-map');
vr-varad marked this conversation as resolved.
Show resolved Hide resolved
var sourceArray = [ 10, 20, 30, 40, 50 ];
var indices = [ 2, 0, 3, 1 ]; // Indices to be taken
var mode = 'wrap'; // Index mode: 'wrap' to wrap around when exceeding array length

// Use Case 1: Multiply each value by its index
function multiplyByIndex( value, index ) {
return value * index;
}

// Use Case 2: Add 100 to each value
function addTo100( value ) {
return value + 100;
}

// Applying Use Case 1: Multiply each value by its index
var multipliedResult = takeMap( sourceArray, indices, mode, multiplyByIndex );
// returns [ 60, 0, 120, 20 ]

// Applying Use Case 2: Add 100 to each value
var addedResult = takeMap( sourceArray, indices, mode, addTo100 );
// returns [ 130, 110, 140, 120 ]
```

</section>

<!-- /.examples -->

<!-- Section for related `stdlib` packages. Do not manually edit this section, as it is automatically populated. -->

<section class="related">

</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">

[@stdlib/ndarray/base/ind]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/base/ind

</section>

<!-- /.links -->
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
/**
* @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 pow = require( '@stdlib/math/base/special/pow' );
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var zeros = require( '@stdlib/array/zeros' );
var isArray = require( '@stdlib/assert/is-array' );
var pkg = require( './../package.json' ).name;
var takeMap = require( './../lib' );


// FUNCTIONS //

/**
* Creates a benchmark function.
*
* @private
* @param {PositiveInteger} len - array length
* @returns {Function} benchmark function
*/
function createBenchmark( len ) {
var out;
var idx;

idx = discreteUniform( len, 0, 3, {
'dtype': 'generic'
});
out = zeros( len, 'generic' );

return benchmark;

/**
* Benchmark function.
*
* @private
* @param {Benchmark} b - benchmark instance
*/
function benchmark( b ) {
var x;
var v;
var i;

x = [ 1, 2, 3, 4 ];
function clbk( val ) {
return val;
}

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
v = takeMap.assign( x, idx, 'throw', out, 1, 0, clbk );
if ( typeof v !== 'object' ) {
b.fail( 'should return an array' );
}
}
b.toc();
if ( !isArray( v ) ) {
b.fail( 'should return an array' );
}
b.pass( 'benchmark finished' );
b.end();
}
}


// MAIN //

/**
* Main execution sequence.
*
* @private
*/
function main() {
var len;
var min;
var max;
var f;
var i;

min = 1; // 10^min
max = 6; // 10^max

for ( i = min; i <= max; i++ ) {
len = pow( 10, i );
f = createBenchmark( len );
bench( pkg+':assign:len='+len, f );
}
}

main();
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/**
* @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 isArray = require( '@stdlib/assert/is-array' );
var zeroTo = require( '@stdlib/array/base/zero-to' );
var pkg = require( './../package.json' ).name;
var takeMap = require( './../lib' );


// MAIN //

bench( pkg+'::copy:len=100', function benchmark( b ) {
var x;
var i;
var v;

x = zeroTo( 100 );

function clbk( val ) {
return val;
}

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
v = takeMap( x, x, 'throw', clbk );
if ( typeof v !== 'object' ) {
b.fail( 'should return an array' );
}
}
b.toc();
if ( !isArray( v ) ) {
b.fail( 'should return an array' );
}
b.pass( 'benchmark finished' );
b.end();
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
/**
* @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 pow = require( '@stdlib/math/base/special/pow' );
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var isArray = require( '@stdlib/assert/is-array' );
var pkg = require( './../package.json' ).name;
var takeMap = require( './../lib' );


// FUNCTIONS //

/**
* Creates a benchmark function.
*
* @private
* @param {PositiveInteger} len - array length
* @returns {Function} benchmark function
*/
function createBenchmark( len ) {
var idx = discreteUniform( len, 0, 3 );
return benchmark;

/**
* Benchmark function.
*
* @private
* @param {Benchmark} b - benchmark instance
*/
function benchmark( b ) {
var x;
var v;
var i;

x = [ 1, 2, 3, 4 ];

function clbk( val ) {
return val;
}

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
v = takeMap( x, idx, 'throw', clbk );
if ( typeof v !== 'object' ) {
b.fail( 'should return an array' );
}
}
b.toc();
if ( !isArray( v ) ) {
b.fail( 'should return an array' );
}
b.pass( 'benchmark finished' );
b.end();
}
}


// MAIN //

/**
* Main execution sequence.
*
* @private
*/
function main() {
var len;
var min;
var max;
var f;
var i;

min = 1; // 10^min
max = 6; // 10^max

for ( i = min; i <= max; i++ ) {
len = pow( 10, i );
f = createBenchmark( len );
bench( pkg+':len='+len, f );
}
}

main();
Loading
Loading