Skip to content

Commit fa26ede

Browse files
committed
feat: add support for struct arrays
--- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: passed - task: lint_package_json status: na - task: lint_repl_help status: passed - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: passed - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed ---
1 parent 04c434a commit fa26ede

File tree

10 files changed

+59
-27
lines changed

10 files changed

+59
-27
lines changed

lib/node_modules/@stdlib/ndarray/base/buffer-dtype/README.md

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ var dtype = require( '@stdlib/ndarray/base/buffer-dtype' );
4242

4343
#### dtype( buffer )
4444

45-
Returns the [data type][@stdlib/ndarray/dtypes] of an ndarray data [`buffer`][@stdlib/ndarray/base/buffer-ctors].
45+
Returns the [data type][@stdlib/ndarray/dtypes] of an ndarray data [buffer][@stdlib/ndarray/base/buffer-ctors].
4646

4747
```javascript
4848
var Float64Array = require( '@stdlib/array/float64' );
@@ -52,7 +52,7 @@ var dt = dtype( buf );
5252
// returns 'float64'
5353
```
5454

55-
If provided an ndarray data [`buffer`][@stdlib/ndarray/base/buffer-ctors] having an unknown or unsupported [data type][@stdlib/ndarray/dtypes], the function returns `null`.
55+
If provided an ndarray data [buffer][@stdlib/ndarray/base/buffer-ctors] having an unknown or unsupported [data type][@stdlib/ndarray/dtypes], the function returns `null`.
5656

5757
```javascript
5858
var dt = dtype( 'beep' );
@@ -82,33 +82,26 @@ var dt = dtype( 'beep' );
8282
```javascript
8383
var dtypes = require( '@stdlib/ndarray/dtypes' );
8484
var bufferCtors = require( '@stdlib/ndarray/base/buffer-ctors' );
85-
var isFunction = require( '@stdlib/assert/is-function' );
8685
var dtype = require( '@stdlib/ndarray/base/buffer-dtype' );
8786

8887
// Get a list of supported ndarray buffer data types:
89-
var DTYPES = dtypes();
88+
var DTYPES = dtypes( 'integer_and_generic' );
9089

9190
// Buffer length:
9291
var len = 10;
9392

9493
// For each supported data type, create a buffer and confirm its data type...
9594
var ctor;
96-
var buf;
9795
var dt;
9896
var i;
9997
for ( i = 0; i < DTYPES.length; i++ ) {
10098
ctor = bufferCtors( DTYPES[ i ] );
101-
if ( DTYPES[ i ] === 'binary' && isFunction( ctor.alloc ) ) {
102-
buf = ctor.alloc( len );
103-
} else {
104-
buf = new ctor( len );
105-
}
106-
dt = dtype( buf );
99+
dt = dtype( new ctor( len ) );
107100
console.log( '%s == %s => %s', DTYPES[ i ], dt, DTYPES[ i ] === dt );
108101
}
109102

110103
// Try an array-like object...
111-
buf = {
104+
var buf = {
112105
'length': 10
113106
};
114107
dt = dtype( buf );

lib/node_modules/@stdlib/ndarray/base/buffer-dtype/benchmark/benchmark.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ var dtype = require( './../lib' );
3131

3232
// VARIABLES //
3333

34-
var DTYPES = dtypes();
34+
var DTYPES = dtypes( 'integer_and_generic' );
3535

3636

3737
// MAIN //

lib/node_modules/@stdlib/ndarray/base/buffer-dtype/docs/repl.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
Returns
1414
-------
15-
out: string|null
15+
out: string|Function|null
1616
Data type.
1717

1818
Examples

lib/node_modules/@stdlib/ndarray/base/buffer-dtype/docs/types/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
* var dt = dtype( 'beep' );
3232
* // returns null
3333
*/
34-
declare function dtype( value: any ): string | null;
34+
declare function dtype( value: any ): string | null; // FIXME: add support for `Struct` constructors
3535

3636

3737
// EXPORTS //

lib/node_modules/@stdlib/ndarray/base/buffer-dtype/examples/index.js

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,33 +20,26 @@
2020

2121
var dtypes = require( '@stdlib/ndarray/dtypes' );
2222
var bufferCtors = require( '@stdlib/ndarray/base/buffer-ctors' );
23-
var isFunction = require( '@stdlib/assert/is-function' );
2423
var dtype = require( './../lib' );
2524

2625
// Get a list of supported ndarray buffer data types:
27-
var DTYPES = dtypes();
26+
var DTYPES = dtypes( 'integer_and_generic' );
2827

2928
// Buffer length:
3029
var len = 10;
3130

3231
// For each supported data type, create a buffer and confirm its data type...
3332
var ctor;
34-
var buf;
3533
var dt;
3634
var i;
3735
for ( i = 0; i < DTYPES.length; i++ ) {
3836
ctor = bufferCtors( DTYPES[ i ] );
39-
if ( DTYPES[ i ] === 'binary' && isFunction( ctor.alloc ) ) {
40-
buf = ctor.alloc( len );
41-
} else {
42-
buf = new ctor( len );
43-
}
44-
dt = dtype( buf );
37+
dt = dtype( new ctor( len ) );
4538
console.log( '%s == %s => %s', DTYPES[ i ], dt, DTYPES[ i ] === dt );
4639
}
4740

4841
// Try an array-like object...
49-
buf = {
42+
var buf = {
5043
'length': 10
5144
};
5245
dt = dtype( buf );

lib/node_modules/@stdlib/ndarray/base/buffer-dtype/lib/ctor2dtype.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
// Mapping from ndarray data buffer constructors to data types...
2424
var dtypes = {
2525
'Buffer': 'binary',
26+
'Float16Array': 'float16',
2627
'Float32Array': 'float32',
2728
'Float64Array': 'float64',
2829
'Array': 'generic',
@@ -34,6 +35,7 @@ var dtypes = {
3435
'Uint32Array': 'uint32',
3536
'Uint8Array': 'uint8',
3637
'Uint8ClampedArray': 'uint8c',
38+
'Complex32Array': 'complex32',
3739
'Complex64Array': 'complex64',
3840
'Complex128Array': 'complex128',
3941
'BooleanArray': 'bool'

lib/node_modules/@stdlib/ndarray/base/buffer-dtype/lib/ctors.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,34 @@ var Complex128Array = require( '@stdlib/array/complex128' );
3434
var BooleanArray = require( '@stdlib/array/bool' );
3535

3636

37+
// FUNCTIONS //
38+
39+
/**
40+
* Throws an error.
41+
*
42+
* @private
43+
* @throws {Error} not implemented
44+
*/
45+
function notImplemented() {
46+
throw new Error( 'not implemented' );
47+
}
48+
49+
3750
// MAIN //
3851

3952
// Note: order should match `dtypes` order
40-
var CTORS = [
53+
var CTORS = [ // eslint-disable-line vars-on-top
4154
Float64Array,
4255
Float32Array,
56+
notImplemented, // FIXME: replace with `Float16Array` once implemented
4357
Int32Array,
4458
Uint32Array,
4559
Int16Array,
4660
Uint16Array,
4761
Int8Array,
4862
Uint8Array,
4963
Uint8ClampedArray,
64+
notImplemented, // FIXME: replace with `Complex32Array` once implemented
5065
Complex64Array,
5166
Complex128Array,
5267
BooleanArray

lib/node_modules/@stdlib/ndarray/base/buffer-dtype/lib/dtypes.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424
var DTYPES = [
2525
'float64',
2626
'float32',
27+
'float16',
2728
'int32',
2829
'uint32',
2930
'int16',
3031
'uint16',
3132
'int8',
3233
'uint8',
3334
'uint8c',
35+
'complex32',
3436
'complex64',
3537
'complex128',
3638
'bool'

lib/node_modules/@stdlib/ndarray/base/buffer-dtype/lib/main.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
// MODULES //
2222

23+
var isStructConstructorLike = require( '@stdlib/assert/is-struct-constructor-like' );
2324
var isBuffer = require( '@stdlib/assert/is-buffer' );
2425
var isArray = require( '@stdlib/assert/is-array' );
2526
var constructorName = require( '@stdlib/utils/constructor-name' );
@@ -39,7 +40,7 @@ var NTYPES = DTYPES.length;
3940
* Returns the data type of an ndarray data buffer.
4041
*
4142
* @param {*} value - input value
42-
* @returns {(string|null)} data type
43+
* @returns {(string|Function|null)} data type
4344
*
4445
* @example
4546
* var dt = dtype( [ 1, 2, 3 ] );
@@ -61,6 +62,9 @@ function dtype( value ) {
6162
return DTYPES[ i ];
6263
}
6364
}
65+
if ( value && isStructConstructorLike( value.struct ) ) {
66+
return value.struct;
67+
}
6468
// If the above failed, fall back to a more robust (and significantly slower) means for resolving underlying data types:
6569
return ctor2dtype[ constructorName( value ) ] || null;
6670
}

lib/node_modules/@stdlib/ndarray/base/buffer-dtype/test/test.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
var tape = require( 'tape' );
2424
var dtypes = require( '@stdlib/ndarray/dtypes' );
2525
var bufferCtors = require( '@stdlib/ndarray/base/buffer-ctors' );
26+
var structFactory = require( '@stdlib/array/struct-factory' );
2627
var isFunction = require( '@stdlib/assert/is-function' );
2728
var dtype = require( './../lib' );
2829

@@ -46,6 +47,10 @@ tape( 'the function returns the data type for ndarray data buffers', function te
4647

4748
for ( i = 0; i < DTYPES.length; i++ ) {
4849
ctor = bufferCtors( DTYPES[ i ] );
50+
if ( DTYPES[ i ] === 'float16' || DTYPES[ i ] === 'complex32' ) {
51+
// FIXME: remove this condition once `float16` and `complex32` are supported
52+
continue;
53+
}
4954
if ( DTYPES[ i ] === 'binary' && isFunction( ctor.alloc ) ) {
5055
buf = ctor.alloc( 10 );
5156
} else {
@@ -57,6 +62,24 @@ tape( 'the function returns the data type for ndarray data buffers', function te
5762
t.end();
5863
});
5964

65+
tape( 'the function supports struct arrays', function test( t ) {
66+
var ctor;
67+
var buf;
68+
var dt;
69+
70+
ctor = structFactory([
71+
{
72+
'name': 'beep',
73+
'type': 'float64'
74+
}
75+
]);
76+
77+
buf = new ctor( 10 );
78+
dt = dtype( buf );
79+
t.strictEqual( dt, buf.struct, 'returns expected value' );
80+
t.end();
81+
});
82+
6083
tape( 'the function supports generic objects', function test( t ) {
6184
var buf;
6285
var dt;

0 commit comments

Comments
 (0)