Skip to content

Commit 8874562

Browse files
committed
fix: add missing support for minimal ndarray-like objects not supporting a strides property
1 parent 693a93d commit 8874562

File tree

2 files changed

+149
-1
lines changed

2 files changed

+149
-1
lines changed

lib/node_modules/@stdlib/ndarray/base/strides/lib/main.js

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,15 @@
2020

2121
// MODULES //
2222

23+
var shape2strides = require( '@stdlib/ndarray/base/shape2strides' );
2324
var copyIndexed = require( '@stdlib/array/base/copy-indexed' );
2425

2526

27+
// VARIABLES //
28+
29+
var ROW_MAJOR = 'row-major';
30+
31+
2632
// MAIN //
2733

2834
/**
@@ -39,7 +45,22 @@ var copyIndexed = require( '@stdlib/array/base/copy-indexed' );
3945
* // returns [ 9, 3, 1 ]
4046
*/
4147
function strides( x, copy ) {
42-
var st = x.strides;
48+
var ord;
49+
var sh;
50+
var st;
51+
52+
st= x.strides;
53+
if ( typeof st !== 'object' || st === null ) {
54+
sh = x.shape;
55+
if ( sh.length === 0 ) {
56+
return [ 0 ];
57+
}
58+
ord = x.order;
59+
if ( typeof ord !== 'string' ) {
60+
ord = ROW_MAJOR;
61+
}
62+
return shape2strides( sh, ord );
63+
}
4364
if ( copy ) {
4465
return copyIndexed( st );
4566
}

lib/node_modules/@stdlib/ndarray/base/strides/test/test.js

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,133 @@ tape( 'the function accepts minimal ndarray-like objects (strides)', function te
106106
t.end();
107107
});
108108

109+
tape( 'the function accepts minimal ndarray-like objects (shape)', function test( t ) {
110+
var expected;
111+
var values;
112+
var out;
113+
var i;
114+
115+
values = [
116+
{
117+
'shape': [ 3, 3, 3 ]
118+
},
119+
{
120+
'shape': [ 1, 1 ]
121+
},
122+
{
123+
'shape': [ 3, 3, 0, 3 ]
124+
},
125+
{
126+
'shape': [ 1, 2, 3, 4 ]
127+
},
128+
{
129+
'shape': [ 5 ]
130+
}
131+
];
132+
133+
expected = [
134+
[ 9, 3, 1 ],
135+
[ 1, 1 ],
136+
[ 0, 0, 3, 1 ],
137+
[ 24, 12, 4, 1 ],
138+
[ 1 ]
139+
];
140+
141+
for ( i = 0; i < values.length; i++ ) {
142+
out = strides( values[ i ], false );
143+
t.deepEqual( out, expected[ i ], 'returns expected value for shape '+values[ i ].shape.join( 'x' ) );
144+
}
145+
t.end();
146+
});
147+
148+
tape( 'the function accepts minimal ndarray-like objects (shape, order=row-major)', function test( t ) {
149+
var expected;
150+
var values;
151+
var out;
152+
var i;
153+
154+
values = [
155+
{
156+
'shape': [ 3, 3, 3 ],
157+
'order': 'row-major'
158+
},
159+
{
160+
'shape': [ 1, 1 ],
161+
'order': 'row-major'
162+
},
163+
{
164+
'shape': [ 3, 3, 0, 3 ],
165+
'order': 'row-major'
166+
},
167+
{
168+
'shape': [ 1, 2, 3, 4 ],
169+
'order': 'row-major'
170+
},
171+
{
172+
'shape': [ 5 ],
173+
'order': 'row-major'
174+
}
175+
];
176+
177+
expected = [
178+
[ 9, 3, 1 ],
179+
[ 1, 1 ],
180+
[ 0, 0, 3, 1 ],
181+
[ 24, 12, 4, 1 ],
182+
[ 1 ]
183+
];
184+
185+
for ( i = 0; i < values.length; i++ ) {
186+
out = strides( values[ i ], false );
187+
t.deepEqual( out, expected[ i ], 'returns expected value for shape '+values[ i ].shape.join( 'x' ) );
188+
}
189+
t.end();
190+
});
191+
192+
tape( 'the function accepts minimal ndarray-like objects (shape, order=column-major)', function test( t ) {
193+
var expected;
194+
var values;
195+
var out;
196+
var i;
197+
198+
values = [
199+
{
200+
'shape': [ 3, 3, 3 ],
201+
'order': 'column-major'
202+
},
203+
{
204+
'shape': [ 1, 1 ],
205+
'order': 'column-major'
206+
},
207+
{
208+
'shape': [ 3, 3, 0, 3 ],
209+
'order': 'column-major'
210+
},
211+
{
212+
'shape': [ 1, 2, 3, 4 ],
213+
'order': 'column-major'
214+
},
215+
{
216+
'shape': [ 5 ],
217+
'order': 'column-major'
218+
}
219+
];
220+
221+
expected = [
222+
[ 1, 3, 9 ],
223+
[ 1, 1 ],
224+
[ 1, 3, 9, 0 ],
225+
[ 1, 1, 2, 6 ],
226+
[ 1 ]
227+
];
228+
229+
for ( i = 0; i < values.length; i++ ) {
230+
out = strides( values[ i ], false );
231+
t.deepEqual( out, expected[ i ], 'returns expected value for shape '+values[ i ].shape.join( 'x' ) );
232+
}
233+
t.end();
234+
});
235+
109236
tape( 'the function supports returning a guaranteed copy of an input ndarray strides', function test( t ) {
110237
var expected;
111238
var values;

0 commit comments

Comments
 (0)