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 8 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
5 changes: 3 additions & 2 deletions lib/node_modules/@stdlib/array/base/map2d/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,9 @@
"bugs": {
"url": "https://github.com/stdlib-js/stdlib/issues"
},
"dependencies": {},
"devDependencies": {},
"dependencies": {
vr-varad marked this conversation as resolved.
Show resolved Hide resolved
"make": "^0.8.1"
},
"engines": {
"node": ">=0.10.0",
"npm": ">2.7.0"
Expand Down
124 changes: 124 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,124 @@
<!--

@license Apache-2.0

Copyright (c) 2022 The Stdlib Authors.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Copyright (c) 2022 The Stdlib Authors.
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
vr-varad marked this conversation as resolved.
Show resolved Hide resolved

> Combine the functionality of take and map into a single API call.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure if this is correct description.


<section class="usage">

## Usage

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

#### take( x, indices, mode, clbk[, thisArg])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#### take( x, indices, mode, clbk[, thisArg])
#### takeMap( x, indices, mode, clbk[, thisArg] )


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 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);
vr-varad marked this conversation as resolved.
Show resolved Hide resolved
// returns [ 4, 8 ]
```

The function supports the following parameters:

- **x**: The input array from which elements will be selected based on the provided indices.
- **indices**: An array of indices indicating the positions of elements to be selected from the input array.
- **mode**: index [mode][@stdlib/ndarray/base/ind].
- **clbk**: A callback function that maps each selected value specified by indices to the corresponding output value.
- **thisArg**: An optional parameter that can be used to set the this value within the callback function.
vr-varad marked this conversation as resolved.
Show resolved Hide resolved


vr-varad marked this conversation as resolved.
Show resolved Hide resolved
Planeshifter 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 filledBy = require('@stdlib/array/base/filled-by');
var discreteUniform = require('@stdlib/random/base/discrete-uniform');
var linspace = require('@stdlib/array/base/linspace');
var take = require('@stdlib/array/base/take');
var takeMap = require('@stdlib/array/base/take-map');
vr-varad marked this conversation as resolved.
Show resolved Hide resolved

// Generate a linearly spaced array:
var x = linspace(0, 100, 11);
console.log('Original Array:', x);

// Generate an array of random indices:
var N = discreteUniform(5, 15);
var indices = filledBy(N, discreteUniform.factory(0, x.length - 1));
console.log('Generated Indices:', indices);

// Take a random sample of elements from `x` using `take`:
var yTake = take(x, indices, 'throw');
console.log('Taken Elements using take:', yTake);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
console.log('Taken Elements using take:', yTake);
// returns <expected output>

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's not use a random example here. Use explicit values.


// Define a custom mapping function:
function customMapping(value) {
return value * 2;
}

// Take a random sample of elements from `x` and apply custom mapping using `takeMap`:
var yTakeMap = takeMap(x, indices, 'throw', customMapping);
console.log('Taken and Mapped Elements using takeMap:', yTakeMap);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same comment as above.


```

</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/ndarray-base-ind

</section>

<!-- /.links -->
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
/**
* @license Apache-2.0
*
* Copyright (c) 2022 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 take = 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 ];

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
v = take.assign( x, idx, 'throw', out, 1, 0 );
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,52 @@
/**
* @license Apache-2.0
*
* Copyright (c) 2022 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 take = require( './../lib' );


// MAIN //

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

x = zeroTo( 100 );

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
v = take( x, x, 'throw' );
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,98 @@
/**
* @license Apache-2.0
*
* Copyright (c) 2022 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 take = 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 ];

b.tic();
for ( i = 0; i < b.iterations; i++ ) {
v = take( x, idx, 'throw' );
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