Skip to content

Commit 0de3922

Browse files
Jaysukh-409kgryte
andauthored
feat: add slice method to array/complex64
PR-URL: stdlib-js#1257 Co-authored-by: Athan Reines <[email protected]> Reviewed-by: Athan Reines <[email protected]> Signed-off-by: Athan Reines <[email protected]>
1 parent 1f0aedc commit 0de3922

File tree

6 files changed

+719
-0
lines changed

6 files changed

+719
-0
lines changed

lib/node_modules/@stdlib/array/complex64/README.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1754,6 +1754,100 @@ A few notes:
17541754
- If a target array cannot accommodate all values (i.e., the length of source array plus `i` exceeds the target array length), the method throws an error.
17551755
- If provided a [typed array][@stdlib/array/typed] which shares an [`ArrayBuffer`][@stdlib/array/buffer] with the target array, the method will intelligently copy the source range to the destination range.
17561756

1757+
<a name="method-slice"></a>
1758+
1759+
#### Complex64Array.prototype.slice( \[start\[, end]] )
1760+
1761+
Copies a portion of a typed array to a new typed array.
1762+
1763+
```javascript
1764+
var realf = require( '@stdlib/complex/realf' );
1765+
var imagf = require( '@stdlib/complex/imagf' );
1766+
1767+
var arr = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );
1768+
1769+
var out = arr.slice();
1770+
// returns <Complex64Array>
1771+
1772+
var len = out.length;
1773+
// returns 4
1774+
1775+
var z = out.get( 0 );
1776+
// returns <Complex64>
1777+
1778+
var re = realf( z );
1779+
// returns 1.0
1780+
1781+
var im = imagf( z );
1782+
// returns 2.0
1783+
1784+
z = out.get( len-1 );
1785+
// returns <Complex64>
1786+
1787+
re = realf( z );
1788+
// returns 7.0
1789+
1790+
im = imagf( z );
1791+
// returns 8.0
1792+
```
1793+
1794+
By default, the method returns a typed array beginning with the first array element. To specify an alternative array index at which to begin, provide a `start` index (inclusive).
1795+
1796+
```javascript
1797+
var imagf = require( '@stdlib/complex/imagf' );
1798+
var realf = require( '@stdlib/complex/realf' );
1799+
1800+
var arr = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );
1801+
1802+
var out = arr.slice( 1 );
1803+
// returns <Complex64Array>
1804+
1805+
var len = out.length;
1806+
// returns 3
1807+
1808+
var z = out.get( 0 );
1809+
// returns <Complex64>
1810+
1811+
var re = realf( z );
1812+
// returns 3.0
1813+
1814+
var im = imagf( z );
1815+
// returns 4.0
1816+
```
1817+
1818+
By default, the method returns a typed array which includes all array elements after `start`. To limit the number of array elements after `start`, provide an `end` index (exclusive).
1819+
1820+
```javascript
1821+
var realf = require( '@stdlib/complex/realf' );
1822+
var imagf = require( '@stdlib/complex/imagf' );
1823+
1824+
var arr = new Complex64Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0 ] );
1825+
1826+
var out = arr.slice( 1, -1 );
1827+
// returns <Complex64Array>
1828+
1829+
var len = out.length;
1830+
// returns 2
1831+
1832+
var z = out.get( 0 );
1833+
// returns <Complex64>
1834+
1835+
var re = realf( z );
1836+
// returns 3.0
1837+
1838+
var im = imagf( z );
1839+
// returns 4.0
1840+
1841+
z = out.get( len-1 );
1842+
// returns <Complex64>
1843+
1844+
re = realf( z );
1845+
// returns 5.0
1846+
1847+
im = imagf( z );
1848+
// returns 6.0
1849+
```
1850+
17571851
<a name="method-some"></a>
17581852

17591853
#### Complex64Array.prototype.some( predicate\[, thisArg] )
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* @license Apache-2.0
3+
*
4+
* Copyright (c) 2023 The Stdlib Authors.
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
'use strict';
20+
21+
// MODULES //
22+
23+
var bench = require( '@stdlib/bench' );
24+
var isComplex64Array = require( '@stdlib/assert/is-complex64array' );
25+
var pkg = require( './../package.json' ).name;
26+
var Complex64Array = require( './../lib' );
27+
28+
29+
// MAIN //
30+
31+
bench( pkg+':slice', function benchmark( b ) {
32+
var out;
33+
var arr;
34+
var i;
35+
36+
arr = new Complex64Array( [ 1, 2, 3, 4, 5, 6 ] );
37+
38+
b.tic();
39+
for ( i = 0; i < b.iterations; i++ ) {
40+
out = arr.slice();
41+
if ( typeof out !== 'object' ) {
42+
b.fail( 'should return an object' );
43+
}
44+
}
45+
b.toc();
46+
if ( !isComplex64Array( out ) ) {
47+
b.fail( 'should return a Complex64Array' );
48+
}
49+
b.pass( 'benchmark finished' );
50+
b.end();
51+
});
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/**
2+
* @license Apache-2.0
3+
*
4+
* Copyright (c) 2023 The Stdlib Authors.
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
'use strict';
20+
21+
// MODULES //
22+
23+
var bench = require( '@stdlib/bench' );
24+
var isComplex64Array = require( '@stdlib/assert/is-complex64array' );
25+
var pow = require( '@stdlib/math/base/special/pow' );
26+
var Complex64 = require( '@stdlib/complex/float32' );
27+
var pkg = require( './../package.json' ).name;
28+
var Complex64Array = require( './../lib' );
29+
30+
31+
// FUNCTIONS //
32+
33+
/**
34+
* Creates a benchmark function.
35+
*
36+
* @private
37+
* @param {PositiveInteger} len - array length
38+
* @returns {Function} benchmark function
39+
*/
40+
function createBenchmark( len ) {
41+
var arr;
42+
var i;
43+
44+
arr = [];
45+
for ( i = 0; i < len; i++ ) {
46+
arr.push( new Complex64( i, i ) );
47+
}
48+
arr = new Complex64Array( arr );
49+
50+
return benchmark;
51+
52+
/**
53+
* Benchmark function.
54+
*
55+
* @private
56+
* @param {Benchmark} b - benchmark instance
57+
*/
58+
function benchmark( b ) {
59+
var out;
60+
var i;
61+
62+
b.tic();
63+
for ( i = 0; i < b.iterations; i++ ) {
64+
out = arr.slice();
65+
if ( typeof out !== 'object' ) {
66+
b.fail( 'should return an object' );
67+
}
68+
}
69+
b.toc();
70+
if ( !isComplex64Array( out ) ) {
71+
b.fail( 'should return a Complex64Array' );
72+
}
73+
b.pass( 'benchmark finished' );
74+
b.end();
75+
}
76+
}
77+
78+
79+
// MAIN //
80+
81+
/**
82+
* Main execution sequence.
83+
*
84+
* @private
85+
*/
86+
function main() {
87+
var len;
88+
var min;
89+
var max;
90+
var f;
91+
var i;
92+
93+
min = 1; // 10^min
94+
max = 6; // 10^max
95+
96+
for ( i = min; i <= max; i++ ) {
97+
len = pow( 10, i );
98+
f = createBenchmark( len );
99+
bench( pkg+':slice:len='+len, f );
100+
}
101+
}
102+
103+
main();

lib/node_modules/@stdlib/array/complex64/docs/types/index.d.ts

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -872,6 +872,76 @@ declare class Complex64Array implements Complex64ArrayInterface {
872872
*/
873873
set( value: ArrayLike<number | ComplexLike> | RealOrComplexTypedArray | ComplexLike, i?: number ): void;
874874

875+
/**
876+
* Copies a portion of a typed array to a new typed array.
877+
*
878+
* @param start - starting index (inclusive)
879+
* @param end - ending index (exclusive)
880+
* @throws indices must be integers
881+
* @returns output array
882+
*
883+
* @example
884+
* var realf = require( '@stdlib/complex/realf' );
885+
* var imagf = require( '@stdlib/complex/imagf' );
886+
*
887+
* var arr = new Complex64Array( 5 );
888+
*
889+
* arr.set( [ 1.0, -1.0 ], 0 );
890+
* arr.set( [ 2.0, -2.0 ], 1 );
891+
* arr.set( [ 3.0, -3.0 ], 2 );
892+
* arr.set( [ 4.0, -4.0 ], 3 );
893+
* arr.set( [ 5.0, -5.0 ], 4 );
894+
*
895+
* var out = arr.slice();
896+
* // returns <Complex64Array>
897+
*
898+
* var len = out.length;
899+
* // returns 5
900+
*
901+
* var z = out.get( 0 );
902+
* // returns <Complex64>
903+
*
904+
* var re = realf( z );
905+
* // returns 1.0
906+
*
907+
* var im = imagf( z );
908+
* // returns -1.0
909+
*
910+
* z = out.get( len-1 );
911+
* // returns <Complex64>
912+
*
913+
* re = realf( z );
914+
* // returns 5.0
915+
*
916+
* im = imagf( z );
917+
* // returns -5.0
918+
*
919+
* out = arr.slice( 1, -2 );
920+
* // returns <Complex64Array>
921+
*
922+
* len = out.length;
923+
* // returns 2
924+
*
925+
* z = out.get( 0 );
926+
* // returns <Complex64>
927+
*
928+
* re = realf( z );
929+
* // returns 2.0
930+
*
931+
* im = imagf( z );
932+
* // returns -2.0
933+
*
934+
* z = out.get( len-1 );
935+
* // returns <Complex64>
936+
*
937+
* re = realf( z );
938+
* // returns 3.0
939+
*
940+
* im = imagf( z );
941+
* // returns -3.0
942+
*/
943+
slice( start?: number, end?: number ): Complex64Array;
944+
875945
/**
876946
* Tests whether at least one element in an array passes a test implemented by a predicate function.
877947
*

0 commit comments

Comments
 (0)