|
18 | 18 |
|
19 | 19 | 'use strict'; |
20 | 20 |
|
| 21 | +// MODULES // |
| 22 | + |
| 23 | +var stride2offset = require( '@stdlib/strided/base/stride2offset' ); |
| 24 | +var ndarray = require( './ndarray.js' ); |
| 25 | + |
| 26 | + |
21 | 27 | // MAIN // |
22 | 28 |
|
23 | 29 | /** |
|
44 | 50 | */ |
45 | 51 | function drotm( N, x, strideX, y, strideY, param ) { |
46 | 52 | var dflag; |
47 | | -var dh11; |
48 | | -var dh12; |
49 | | -var dh21; |
50 | | -var dh22; |
51 | 53 | var ix; |
52 | 54 | var iy; |
53 | | -var i; |
54 | | -var w; |
55 | | -var z; |
56 | 55 |
|
57 | 56 | dflag = param[ 0 ]; |
58 | 57 | if ( N <= 0 || dflag === -2.0 ) { |
59 | 58 | return y; |
60 | 59 | } |
61 | | -if ( strideX === strideY && strideX > 0 ) { |
62 | | -ix = 0; |
63 | | -if ( dflag < 0.0 ) { |
64 | | -dh11 = param[ 1 ]; |
65 | | -dh12 = param[ 3 ]; |
66 | | -dh21 = param[ 2 ]; |
67 | | -dh22 = param[ 4 ]; |
68 | | -for ( i = 0; i < N; i++ ) { |
69 | | -w = x[ ix ]; |
70 | | -z = y[ ix ]; |
71 | | -x[ ix ] = ( w * dh11 ) + ( z * dh12 ); |
72 | | -y[ ix ] = ( w * dh21 ) + ( z * dh22 ); |
73 | | -ix += strideX; |
74 | | -} |
75 | | -return y; |
76 | | -} |
77 | | -if ( dflag === 0.0 ) { |
78 | | -dh12 = param[ 3 ]; |
79 | | -dh21 = param[ 2 ]; |
80 | | -for ( i = 0; i < N; i++ ) { |
81 | | -w = x[ ix ]; |
82 | | -z = y[ ix ]; |
83 | | -x[ ix ] = w + ( z * dh12 ); |
84 | | -y[ ix ] = ( w * dh21 ) + z; |
85 | | -ix += strideX; |
86 | | -} |
87 | | -return y; |
88 | | -} |
89 | | -dh11 = param[ 1 ]; |
90 | | -dh22 = param[ 4 ]; |
91 | | -for ( i = 0; i < N; i++ ) { |
92 | | -w = x[ ix ]; |
93 | | -z = y[ ix ]; |
94 | | -x[ ix ] = ( w * dh11 ) + z; |
95 | | -y[ ix ] = -w + ( z * dh22 ); |
96 | | -ix += strideX; |
97 | | -} |
98 | | -return y; |
99 | | -} |
100 | | -if ( strideX < 0 ) { |
101 | | -ix = ( 1 - N ) * strideX; |
102 | | -} else { |
103 | | -ix = 0; |
104 | | -} |
105 | | -if ( strideY < 0 ) { |
106 | | -iy = ( 1 - N ) * strideY; |
107 | | -} else { |
108 | | -iy = 0; |
109 | | -} |
110 | | -if ( dflag < 0.0 ) { |
111 | | -dh11 = param[ 1 ]; |
112 | | -dh12 = param[ 3 ]; |
113 | | -dh21 = param[ 2 ]; |
114 | | -dh22 = param[ 4 ]; |
115 | | -for ( i = 0; i < N; i++ ) { |
116 | | -w = x[ ix ]; |
117 | | -z = y[ iy ]; |
118 | | -x[ ix ] = ( w * dh11 ) + ( z * dh12 ); |
119 | | -y[ iy ] = ( w * dh21 ) + ( z * dh22 ); |
120 | | -ix += strideX; |
121 | | -iy += strideY; |
122 | | -} |
123 | | -return y; |
124 | | -} |
125 | | -if ( dflag === 0.0 ) { |
126 | | -dh12 = param[ 3 ]; |
127 | | -dh21 = param[ 2 ]; |
128 | | -for ( i = 0; i < N; i++ ) { |
129 | | -w = x[ ix ]; |
130 | | -z = y[ iy ]; |
131 | | -x[ ix ] = w + ( z * dh12 ); |
132 | | -y[ iy ] = ( w * dh21 ) + z; |
133 | | -ix += strideX; |
134 | | -iy += strideY; |
135 | | -} |
136 | | -return y; |
137 | | -} |
138 | | -dh11 = param[ 1 ]; |
139 | | -dh22 = param[ 4 ]; |
140 | | -for ( i = 0; i < N; i++ ) { |
141 | | -w = x[ ix ]; |
142 | | -z = y[ iy ]; |
143 | | -x[ ix ] = ( w * dh11 ) + z; |
144 | | -y[ iy ] = -w + ( z * dh22 ); |
145 | | -ix += strideX; |
146 | | -iy += strideY; |
147 | | -} |
148 | | -return y; |
| 60 | +ix = stride2offset( N, strideX ); |
| 61 | +iy = stride2offset( N, strideY ); |
| 62 | +return ndarray( N, x, strideX, ix, y, strideY, iy, param ); |
149 | 63 | } |
150 | 64 |
|
151 | 65 |
|
|
0 commit comments