@syncfusion/ej2-calculate 35.1.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/.eslintrc.json +263 -0
  2. package/README.md +132 -0
  3. package/base.d.ts +4 -0
  4. package/base.js +4 -0
  5. package/common.d.ts +4 -0
  6. package/common.js +4 -0
  7. package/dist/ej2-calculate.umd.min.js +11 -0
  8. package/dist/ej2-calculate.umd.min.js.map +1 -0
  9. package/dist/es6/ej2-calculate.es2015.js +24801 -0
  10. package/dist/es6/ej2-calculate.es2015.js.map +1 -0
  11. package/dist/es6/ej2-calculate.es5.js +27229 -0
  12. package/dist/es6/ej2-calculate.es5.js.map +1 -0
  13. package/dist/global/ej2-calculate.min.js +11 -0
  14. package/dist/global/ej2-calculate.min.js.map +1 -0
  15. package/dist/global/index.d.ts +14 -0
  16. package/formulas.d.ts +4 -0
  17. package/formulas.js +4 -0
  18. package/index.d.ts +4 -0
  19. package/index.js +4 -0
  20. package/license +10 -0
  21. package/package.json +30 -0
  22. package/src/base/calculate-model.d.ts +4 -0
  23. package/src/base/calculate-model.js +0 -0
  24. package/src/base/calculate.d.ts +1105 -0
  25. package/src/base/calculate.js +4720 -0
  26. package/src/base/index.d.ts +8 -0
  27. package/src/base/index.js +7 -0
  28. package/src/base/parser.d.ts +208 -0
  29. package/src/base/parser.js +1512 -0
  30. package/src/common/address.d.ts +59 -0
  31. package/src/common/address.js +96 -0
  32. package/src/common/cell-ref.d.ts +32 -0
  33. package/src/common/cell-ref.js +112 -0
  34. package/src/common/common.d.ts +44 -0
  35. package/src/common/common.js +134 -0
  36. package/src/common/enum.d.ts +94 -0
  37. package/src/common/enum.js +97 -0
  38. package/src/common/index.d.ts +9 -0
  39. package/src/common/index.js +8 -0
  40. package/src/common/interface.d.ts +122 -0
  41. package/src/common/interface.js +0 -0
  42. package/src/common/l10n.d.ts +24 -0
  43. package/src/common/l10n.js +54 -0
  44. package/src/common/number-date.d.ts +26 -0
  45. package/src/common/number-date.js +38 -0
  46. package/src/common/sheet-info.d.ts +10 -0
  47. package/src/common/sheet-info.js +17 -0
  48. package/src/common/sort.d.ts +17 -0
  49. package/src/common/sort.js +44 -0
  50. package/src/formulas/array.d.ts +47 -0
  51. package/src/formulas/array.js +718 -0
  52. package/src/formulas/basic.d.ts +47 -0
  53. package/src/formulas/basic.js +181 -0
  54. package/src/formulas/complex-numbers.d.ts +207 -0
  55. package/src/formulas/complex-numbers.js +549 -0
  56. package/src/formulas/database.d.ts +152 -0
  57. package/src/formulas/database.js +579 -0
  58. package/src/formulas/date-time-extra.d.ts +97 -0
  59. package/src/formulas/date-time-extra.js +415 -0
  60. package/src/formulas/date-time-intl.d.ts +57 -0
  61. package/src/formulas/date-time-intl.js +309 -0
  62. package/src/formulas/date-time.d.ts +164 -0
  63. package/src/formulas/date-time.js +1021 -0
  64. package/src/formulas/engineering-base.d.ts +150 -0
  65. package/src/formulas/engineering-base.js +404 -0
  66. package/src/formulas/engineering-bessel.d.ts +65 -0
  67. package/src/formulas/engineering-bessel.js +167 -0
  68. package/src/formulas/engineering-convert.d.ts +35 -0
  69. package/src/formulas/engineering-convert.js +120 -0
  70. package/src/formulas/engineering-misc.d.ts +64 -0
  71. package/src/formulas/engineering-misc.js +168 -0
  72. package/src/formulas/financial-amortization-ecma.d.ts +87 -0
  73. package/src/formulas/financial-amortization-ecma.js +288 -0
  74. package/src/formulas/financial-annuity.d.ts +104 -0
  75. package/src/formulas/financial-annuity.js +419 -0
  76. package/src/formulas/financial-bond-helpers.d.ts +106 -0
  77. package/src/formulas/financial-bond-helpers.js +190 -0
  78. package/src/formulas/financial-cashflow.d.ts +47 -0
  79. package/src/formulas/financial-cashflow.js +203 -0
  80. package/src/formulas/financial-coupons.d.ts +227 -0
  81. package/src/formulas/financial-coupons.js +810 -0
  82. package/src/formulas/financial-depreciation.d.ts +64 -0
  83. package/src/formulas/financial-depreciation.js +247 -0
  84. package/src/formulas/financial-rates.d.ts +54 -0
  85. package/src/formulas/financial-rates.js +140 -0
  86. package/src/formulas/financial-securities.d.ts +126 -0
  87. package/src/formulas/financial-securities.js +488 -0
  88. package/src/formulas/formula-math-helpers.d.ts +212 -0
  89. package/src/formulas/formula-math-helpers.js +599 -0
  90. package/src/formulas/formula-module-base.d.ts +54 -0
  91. package/src/formulas/formula-module-base.js +125 -0
  92. package/src/formulas/formula-owner.d.ts +17 -0
  93. package/src/formulas/formula-owner.js +0 -0
  94. package/src/formulas/index.d.ts +68 -0
  95. package/src/formulas/index.js +67 -0
  96. package/src/formulas/information-advanced.d.ts +44 -0
  97. package/src/formulas/information-advanced.js +157 -0
  98. package/src/formulas/information-ecma.d.ts +33 -0
  99. package/src/formulas/information-ecma.js +88 -0
  100. package/src/formulas/information-extra.d.ts +146 -0
  101. package/src/formulas/information-extra.js +351 -0
  102. package/src/formulas/information.d.ts +34 -0
  103. package/src/formulas/information.js +78 -0
  104. package/src/formulas/logical-extra.d.ts +75 -0
  105. package/src/formulas/logical-extra.js +217 -0
  106. package/src/formulas/logical.d.ts +83 -0
  107. package/src/formulas/logical.js +296 -0
  108. package/src/formulas/lookup-array.d.ts +98 -0
  109. package/src/formulas/lookup-array.js +364 -0
  110. package/src/formulas/lookup-ref-extra.d.ts +64 -0
  111. package/src/formulas/lookup-ref-extra.js +180 -0
  112. package/src/formulas/lookup-ref.d.ts +84 -0
  113. package/src/formulas/lookup-ref.js +263 -0
  114. package/src/formulas/lookup.d.ts +114 -0
  115. package/src/formulas/lookup.js +881 -0
  116. package/src/formulas/math-aggregate.d.ts +74 -0
  117. package/src/formulas/math-aggregate.js +376 -0
  118. package/src/formulas/math-ceiling-ecma.d.ts +42 -0
  119. package/src/formulas/math-ceiling-ecma.js +123 -0
  120. package/src/formulas/math-combinatorics.d.ts +75 -0
  121. package/src/formulas/math-combinatorics.js +290 -0
  122. package/src/formulas/math-misc.d.ts +164 -0
  123. package/src/formulas/math-misc.js +889 -0
  124. package/src/formulas/math-number.d.ts +76 -0
  125. package/src/formulas/math-number.js +261 -0
  126. package/src/formulas/math-rounding.d.ts +115 -0
  127. package/src/formulas/math-rounding.js +728 -0
  128. package/src/formulas/math-trig-hyperbolic.d.ts +55 -0
  129. package/src/formulas/math-trig-hyperbolic.js +113 -0
  130. package/src/formulas/math-trig.d.ts +165 -0
  131. package/src/formulas/math-trig.js +334 -0
  132. package/src/formulas/matrix-base.d.ts +13 -0
  133. package/src/formulas/matrix-base.js +169 -0
  134. package/src/formulas/matrix.d.ts +64 -0
  135. package/src/formulas/matrix.js +161 -0
  136. package/src/formulas/regression-ecma.d.ts +66 -0
  137. package/src/formulas/regression-ecma.js +234 -0
  138. package/src/formulas/statistical-advanced.d.ts +125 -0
  139. package/src/formulas/statistical-advanced.js +756 -0
  140. package/src/formulas/statistical-correlation.d.ts +75 -0
  141. package/src/formulas/statistical-correlation.js +198 -0
  142. package/src/formulas/statistical-dispersion.d.ts +108 -0
  143. package/src/formulas/statistical-dispersion.js +337 -0
  144. package/src/formulas/statistical-distribution-extended.d.ts +176 -0
  145. package/src/formulas/statistical-distribution-extended.js +668 -0
  146. package/src/formulas/statistical-distribution.d.ts +104 -0
  147. package/src/formulas/statistical-distribution.js +368 -0
  148. package/src/formulas/statistical-ecma.d.ts +95 -0
  149. package/src/formulas/statistical-ecma.js +392 -0
  150. package/src/formulas/statistical-extended.d.ts +136 -0
  151. package/src/formulas/statistical-extended.js +340 -0
  152. package/src/formulas/statistical-ifs.d.ts +46 -0
  153. package/src/formulas/statistical-ifs.js +180 -0
  154. package/src/formulas/statistical-moments.d.ts +84 -0
  155. package/src/formulas/statistical-moments.js +269 -0
  156. package/src/formulas/statistical-percentile.d.ts +56 -0
  157. package/src/formulas/statistical-percentile.js +195 -0
  158. package/src/formulas/statistical-sample-base.d.ts +14 -0
  159. package/src/formulas/statistical-sample-base.js +124 -0
  160. package/src/formulas/statistical.d.ts +135 -0
  161. package/src/formulas/statistical.js +542 -0
  162. package/src/formulas/text-advanced.d.ts +64 -0
  163. package/src/formulas/text-advanced.js +222 -0
  164. package/src/formulas/text-ecma.d.ts +54 -0
  165. package/src/formulas/text-ecma.js +106 -0
  166. package/src/formulas/text-extra.d.ts +216 -0
  167. package/src/formulas/text-extra.js +657 -0
  168. package/src/formulas/text.d.ts +125 -0
  169. package/src/formulas/text.js +628 -0
  170. package/src/global.js +1 -0
  171. package/src/index.d.ts +14 -0
  172. package/src/index.js +14 -0
  173. package/tslint.json +111 -0
@@ -0,0 +1,756 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ extendStatics(d, b);
10
+ function __() { this.constructor = d; }
11
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
12
+ };
13
+ })();
14
+ import { FormulasErrorsStrings, CommonErrors } from '../common/index';
15
+ import { isNullOrUndefined } from '@syncfusion/ej2-base';
16
+ import { isNumber } from '../common/number-date';
17
+ import { isCellReference } from '../common/cell-ref';
18
+ import { FormulaModuleBase } from './formula-module-base';
19
+ /**
20
+ * Extended statistical summaries including ranked averages, modes, and specialized aggregates.
21
+ *
22
+ * Registered functions: SMALL, LARGE, MEDIAN, SLOPE, INTERCEPT, RSQ, GEOMEAN.
23
+ *
24
+ * @hidden
25
+ */
26
+ var StatisticalAdvancedFormulas = /** @class */ (function (_super) {
27
+ __extends(StatisticalAdvancedFormulas, _super);
28
+ /**
29
+ * @hidden
30
+ * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).
31
+ */
32
+ function StatisticalAdvancedFormulas(owner) {
33
+ var _this = _super.call(this, owner) || this;
34
+ /** Formula definitions registered with {@link BasicFormulas}. */
35
+ _this.formulas = [
36
+ { formulaName: 'SMALL', category: 'Statistical', description: 'Returns the k-th smallest value in a given array.' },
37
+ { formulaName: 'LARGE', category: 'Statistical', description: 'Returns the k-th largest value in a given array.' },
38
+ { formulaName: 'MEDIAN', category: 'Statistical', description: 'Returns the median of the given set of numbers.' },
39
+ { formulaName: 'SLOPE', category: 'Statistical', description: 'Returns the slope of the line from linear regression of the data points.' },
40
+ { formulaName: 'INTERCEPT', category: 'Statistical', description: 'Calculates the point of the Y-intercept line via linear regression.' },
41
+ { formulaName: 'RSQ', category: 'Statistical', description: 'Returns the square of the Pearson product moment correlation coefficient based on data points in known_ys and known_xs.' },
42
+ { formulaName: 'GEOMEAN', category: 'Statistical', description: 'Returns the geometric mean of an array or range of positive data.' }
43
+ ];
44
+ return _this;
45
+ }
46
+ /**
47
+ * Returns the median of the given set of numbers.
48
+ *
49
+ * Excel: `MEDIAN(...)`.
50
+ *
51
+ * @hidden
52
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
53
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * engine.computeFormula('=MEDIAN(1)');
58
+ * ```
59
+ */
60
+ StatisticalAdvancedFormulas.prototype.ComputeMEDIAN = function () {
61
+ var args = [];
62
+ for (var _i = 0; _i < arguments.length; _i++) {
63
+ args[_i] = arguments[_i];
64
+ }
65
+ var value1;
66
+ var num = [];
67
+ if (isNullOrUndefined(args) || args[0] === '' && args.length === 1) {
68
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
69
+ }
70
+ for (var i = 0; i < args.length; i++) {
71
+ if (this.parent.isCellReference(args[i])) {
72
+ if (args[i].indexOf(':') > -1) {
73
+ var cellCollection = this.parent.getCellCollection(args[i]);
74
+ for (var a = 0; a < cellCollection.length; a++) {
75
+ var cellValue = this.parent.getValueFromArg(cellCollection[a]);
76
+ if (this.parent.getErrorStrings().indexOf(cellValue) > -1) {
77
+ return cellValue;
78
+ }
79
+ else if (cellValue.trim() !== '') {
80
+ num.push(this.parent.parseFloat(cellValue));
81
+ }
82
+ }
83
+ }
84
+ else {
85
+ var cellVal = this.parent.getValueFromArg(args[i]);
86
+ if (this.parent.getErrorStrings().indexOf(cellVal) > -1) {
87
+ return cellVal;
88
+ }
89
+ else if (cellVal.trim() !== '') {
90
+ num.push(this.parent.parseFloat(cellVal));
91
+ }
92
+ }
93
+ }
94
+ else if (args[i] === '' || args[i] === this.parent.falseValue && !this.parent.isCellReference(args[i])) {
95
+ num.push(0);
96
+ }
97
+ else if (args[i] === this.parent.trueValue && !this.parent.isCellReference(args[i])) {
98
+ num.push(1);
99
+ }
100
+ else if (args[i].indexOf(this.parent.tic) > -1 && isNaN(parseFloat(args[i].split(this.parent.tic).join('')))) {
101
+ return this.parent.getErrorStrings()[CommonErrors.Value];
102
+ }
103
+ else {
104
+ var cValue = this.parent.getValueFromArg(args[i]).split(this.parent.tic).join('');
105
+ if (this.parent.getErrorStrings().indexOf(cValue) > -1) {
106
+ return cValue;
107
+ }
108
+ else {
109
+ num.push(this.parent.parseFloat(cValue));
110
+ }
111
+ }
112
+ }
113
+ num = num.sort(function (n1, n2) { return n1 - n2; });
114
+ var len = num.length;
115
+ for (var j = 0; j < len; j++) {
116
+ if (isNaN(num[j])) {
117
+ num.splice(j, 1);
118
+ len = num.length;
119
+ j--;
120
+ if (num.length === 0) {
121
+ break;
122
+ }
123
+ }
124
+ }
125
+ if (num.length % 2 !== 0 && !isNaN(num[parseInt((num.length / 2).toString(), 10)])) {
126
+ value1 = num[parseInt((num.length / 2).toString(), 10)];
127
+ }
128
+ else if (!isNaN(num[num.length / 2]) && !isNaN(num[num.length / 2 - 1])) {
129
+ value1 = (num[num.length / 2] + num[num.length / 2 - 1]) / 2;
130
+ }
131
+ else {
132
+ return this.parent.getErrorStrings()[CommonErrors.Num];
133
+ }
134
+ return value1;
135
+ };
136
+ /**
137
+ * Returns the k-th smallest value in a given array.
138
+ *
139
+ * Excel: `SMALL(...)`.
140
+ *
141
+ * @hidden
142
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
143
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
144
+ */
145
+ StatisticalAdvancedFormulas.prototype.ComputeSMALL = function () {
146
+ var args = [];
147
+ for (var _i = 0; _i < arguments.length; _i++) {
148
+ args[_i] = arguments[_i];
149
+ }
150
+ var value;
151
+ var errCollection = this.parent.getErrorStrings();
152
+ if (isNullOrUndefined(args) || args.length === 1 || args[0] === '') {
153
+ if ((args[0] === '') && (args[1] === '')) {
154
+ return errCollection[CommonErrors.Num];
155
+ }
156
+ else {
157
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
158
+ }
159
+ }
160
+ else if (args.length > 2) {
161
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
162
+ }
163
+ var cellCollection = [];
164
+ var valueCollection = [];
165
+ var numArr = [];
166
+ if (!isNullOrUndefined(args[0])) {
167
+ var originalValue = void 0;
168
+ if (this.parent.isCellReference(args[0])) {
169
+ cellCollection = this.parent.getCellCollection(args[0]);
170
+ for (var i = 0; i < cellCollection.length; i++) {
171
+ originalValue = this.parent.getValueFromArg(cellCollection[i]);
172
+ if (errCollection.indexOf(originalValue) > -1) {
173
+ return originalValue;
174
+ }
175
+ valueCollection.push(originalValue);
176
+ }
177
+ }
178
+ else {
179
+ originalValue = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('');
180
+ if (errCollection.indexOf(originalValue) > -1) {
181
+ return originalValue;
182
+ }
183
+ valueCollection.push(originalValue);
184
+ }
185
+ for (var i = 0; i < valueCollection.length; i++) {
186
+ if (valueCollection[i] !== '' && !isNaN(this.parent.parseFloat(valueCollection[i]))) {
187
+ numArr.push(this.parent.parseFloat(valueCollection[i]));
188
+ }
189
+ }
190
+ if (numArr.length === 0) {
191
+ if (isNullOrUndefined(valueCollection[0]) || args[0].indexOf(this.parent.tic) > -1) {
192
+ return errCollection[CommonErrors.Value];
193
+ }
194
+ }
195
+ }
196
+ numArr = numArr.sort(function (n1, n2) { return n1 - n2; });
197
+ var smallIndex;
198
+ if (!isNullOrUndefined(args[1])) {
199
+ if (this.parent.isCellReference(args[1])) {
200
+ smallIndex = this.parent.getValueFromArg(args[1]);
201
+ if (smallIndex === '') {
202
+ return errCollection[CommonErrors.Num];
203
+ }
204
+ else if (smallIndex.trim() === '') {
205
+ return errCollection[CommonErrors.Value];
206
+ }
207
+ if (smallIndex.toUpperCase() === this.parent.trueValue) {
208
+ smallIndex = '1';
209
+ }
210
+ else if (smallIndex.toUpperCase() === this.parent.falseValue) {
211
+ smallIndex = '0';
212
+ }
213
+ }
214
+ else {
215
+ smallIndex = this.parent.getValueFromArg(args[1]).split(this.parent.tic).join('');
216
+ }
217
+ if (errCollection.indexOf(smallIndex) > -1) {
218
+ return smallIndex;
219
+ }
220
+ else if (smallIndex.trim() === '') {
221
+ return args[1].length > 0 ? errCollection[CommonErrors.Value] : errCollection[CommonErrors.Num];
222
+ }
223
+ else if (isNaN(this.parent.parseFloat(smallIndex))) {
224
+ if (args[1].toUpperCase() === this.parent.trueValue) {
225
+ smallIndex = '1';
226
+ }
227
+ else if (args[1].toUpperCase() === this.parent.falseValue) {
228
+ smallIndex = '0';
229
+ }
230
+ else {
231
+ return errCollection[CommonErrors.Value];
232
+ }
233
+ }
234
+ }
235
+ var finalIndex = (Number(smallIndex) < 1 ? 0 : Math.floor(Number(smallIndex)));
236
+ if (isNullOrUndefined(numArr[finalIndex - 1]) && !isNaN(Number(finalIndex))) {
237
+ return errCollection[CommonErrors.Num];
238
+ }
239
+ else {
240
+ value = numArr[finalIndex - 1];
241
+ }
242
+ return value;
243
+ };
244
+ /**
245
+ * Returns the k-th largest value in a given array.
246
+ *
247
+ * Excel: `LARGE(...)`.
248
+ *
249
+ * @hidden
250
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
251
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
252
+ */
253
+ StatisticalAdvancedFormulas.prototype.ComputeLARGE = function () {
254
+ var args = [];
255
+ for (var _i = 0; _i < arguments.length; _i++) {
256
+ args[_i] = arguments[_i];
257
+ }
258
+ var value;
259
+ var errCollection = this.parent.getErrorStrings();
260
+ if (isNullOrUndefined(args) || args.length === 1 || args[0] === '') {
261
+ if ((args[0] === '') && (args[1] === '')) {
262
+ return errCollection[CommonErrors.Num];
263
+ }
264
+ else {
265
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
266
+ }
267
+ }
268
+ else if (args.length > 2) {
269
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
270
+ }
271
+ var cellCollection = [];
272
+ var valueCollection = [];
273
+ var numArr = [];
274
+ if (!isNullOrUndefined(args[0])) {
275
+ var originalValue = void 0;
276
+ if (this.parent.isCellReference(args[0])) {
277
+ cellCollection = this.parent.getCellCollection(args[0]);
278
+ for (var i = 0; i < cellCollection.length; i++) {
279
+ originalValue = this.parent.getValueFromArg(cellCollection[i]);
280
+ if (errCollection.indexOf(originalValue) > -1) {
281
+ return originalValue;
282
+ }
283
+ valueCollection.push(originalValue);
284
+ }
285
+ }
286
+ else {
287
+ originalValue = this.parent.getValueFromArg(args[0]).split(this.parent.tic).join('');
288
+ if (errCollection.indexOf(originalValue) > -1) {
289
+ return originalValue;
290
+ }
291
+ valueCollection.push(originalValue);
292
+ }
293
+ for (var i = 0; i < valueCollection.length; i++) {
294
+ if (valueCollection[i] !== '' && !isNaN(this.parent.parseFloat(valueCollection[i]))) {
295
+ numArr.push(this.parent.parseFloat(valueCollection[i]));
296
+ }
297
+ }
298
+ if (numArr.length === 0) {
299
+ if (isNullOrUndefined(valueCollection[0]) || args[0].indexOf(this.parent.tic) > -1) {
300
+ return errCollection[CommonErrors.Value];
301
+ }
302
+ }
303
+ }
304
+ numArr = numArr.sort(function (n1, n2) { return n2 - n1; });
305
+ var largeIndex;
306
+ if (!isNullOrUndefined(args[1])) {
307
+ if (this.parent.isCellReference(args[1])) {
308
+ largeIndex = this.parent.getValueFromArg(args[1]);
309
+ if (largeIndex === '') {
310
+ return errCollection[CommonErrors.Num];
311
+ }
312
+ else if (largeIndex.trim() === '') {
313
+ return errCollection[CommonErrors.Value];
314
+ }
315
+ if (largeIndex.toUpperCase() === this.parent.trueValue) {
316
+ largeIndex = '1';
317
+ }
318
+ else if (largeIndex.toUpperCase() === this.parent.falseValue) {
319
+ largeIndex = '0';
320
+ }
321
+ }
322
+ else {
323
+ largeIndex = this.parent.getValueFromArg(args[1]).split(this.parent.tic).join('');
324
+ }
325
+ if (errCollection.indexOf(largeIndex) > -1) {
326
+ return largeIndex;
327
+ }
328
+ else if (largeIndex.trim() === '') {
329
+ return args[1].length > 0 ? errCollection[CommonErrors.Value] : errCollection[CommonErrors.Num];
330
+ }
331
+ else if (isNaN(this.parent.parseFloat(largeIndex))) {
332
+ if (args[1].toUpperCase() === this.parent.trueValue) {
333
+ largeIndex = '1';
334
+ }
335
+ else if (args[1].toUpperCase() === this.parent.falseValue) {
336
+ largeIndex = '0';
337
+ }
338
+ else {
339
+ return errCollection[CommonErrors.Value];
340
+ }
341
+ }
342
+ }
343
+ var finalIndex = (Number(largeIndex) < 1 ? 0 : Math.ceil(Number(largeIndex)));
344
+ if (isNullOrUndefined(numArr[finalIndex - 1]) && !isNaN(Number(finalIndex))) {
345
+ return errCollection[CommonErrors.Num];
346
+ }
347
+ else {
348
+ value = numArr[finalIndex - 1];
349
+ }
350
+ return value;
351
+ };
352
+ /**
353
+ * Returns the slope of the line from linear regression of the data points.
354
+ *
355
+ * Excel: `SLOPE(...)`.
356
+ *
357
+ * @hidden
358
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
359
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
360
+ */
361
+ StatisticalAdvancedFormulas.prototype.ComputeSLOPE = function () {
362
+ var _this = this;
363
+ var args = [];
364
+ for (var _i = 0; _i < arguments.length; _i++) {
365
+ args[_i] = arguments[_i];
366
+ }
367
+ var errCollection = this.parent.getErrorStrings();
368
+ if (isNullOrUndefined(args) || (args.length === 1 && args[0].trim() === '')) {
369
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
370
+ }
371
+ else if (args.length !== 2) {
372
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
373
+ }
374
+ else if (args[0] === '' || args[1] === '') {
375
+ return errCollection[CommonErrors.Value];
376
+ }
377
+ var cellCollection = function (actuaValue) {
378
+ if (actuaValue.indexOf(_this.parent.tic) === -1) {
379
+ actuaValue = _this.parent.getCellCollection(actuaValue.split(_this.parent.tic).join(''));
380
+ }
381
+ else {
382
+ actuaValue = undefined;
383
+ }
384
+ return actuaValue;
385
+ };
386
+ var yPoints = cellCollection(args[0].trim());
387
+ var xPoints = cellCollection(args[1].trim());
388
+ if (isNullOrUndefined(yPoints) || isNullOrUndefined(xPoints) || (yPoints.length < 2 && xPoints.length < 2)) {
389
+ return errCollection[CommonErrors.DivZero];
390
+ }
391
+ else if (yPoints.length !== xPoints.length) {
392
+ return errCollection[CommonErrors.NA];
393
+ }
394
+ var dataCollection = function (actuaValue) {
395
+ actuaValue = _this.getDataCollection(actuaValue);
396
+ for (var b = 0; b < actuaValue.length; b++) {
397
+ if (errCollection.indexOf(actuaValue[b]) > -1) {
398
+ return actuaValue[b].toString();
399
+ }
400
+ }
401
+ return actuaValue;
402
+ };
403
+ yPoints = dataCollection(yPoints);
404
+ if (errCollection.indexOf(yPoints.toString()) > -1) {
405
+ return yPoints.toString();
406
+ }
407
+ xPoints = dataCollection(xPoints);
408
+ if (errCollection.indexOf(xPoints.toString()) > -1) {
409
+ return xPoints.toString();
410
+ }
411
+ var sumXY = 0;
412
+ var sumX2 = 0;
413
+ var sumX = 0;
414
+ var sumY = 0;
415
+ var length = 0;
416
+ for (var i = 0, len = xPoints.length; i < len; ++i) {
417
+ if ((xPoints[i] !== '' && Number(xPoints[i]).toString() !== 'NaN') &&
418
+ (yPoints[i] !== '' && Number(yPoints[i]).toString() !== 'NaN')) {
419
+ sumXY += Number(xPoints[i]) * Number(yPoints[i]);
420
+ sumX += Number(xPoints[i]);
421
+ sumY += Number(yPoints[i]);
422
+ sumX2 += Number(xPoints[i]) * Number(xPoints[i]);
423
+ length++;
424
+ }
425
+ }
426
+ var value = ((sumXY - (sumX * sumY) / length) / (sumX2 - (sumX * sumX) / length)).toString();
427
+ if (value === 'NaN') {
428
+ return errCollection[CommonErrors.DivZero];
429
+ }
430
+ return value;
431
+ };
432
+ /**
433
+ * Calculates the point of the Y-intercept line via linear regression.
434
+ *
435
+ * Excel: `INTERCEPT(...)`.
436
+ *
437
+ * @hidden
438
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
439
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
440
+ */
441
+ StatisticalAdvancedFormulas.prototype.ComputeINTERCEPT = function () {
442
+ var _this = this;
443
+ var args = [];
444
+ for (var _i = 0; _i < arguments.length; _i++) {
445
+ args[_i] = arguments[_i];
446
+ }
447
+ var errCollection = this.parent.getErrorStrings();
448
+ if (isNullOrUndefined(args) || (args.length === 1 && args[0].trim() === '')) {
449
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.InvalidArguments];
450
+ }
451
+ else if (args.length !== 2) {
452
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
453
+ }
454
+ else if (args[0] === '' || args[1] === '') {
455
+ return errCollection[CommonErrors.Value];
456
+ }
457
+ var cellCollection = function (actuaValue) {
458
+ if (actuaValue.indexOf(_this.parent.tic) === -1) {
459
+ actuaValue = _this.parent.getCellCollection(actuaValue.split(_this.parent.tic).join(''));
460
+ }
461
+ else {
462
+ actuaValue = undefined;
463
+ }
464
+ return actuaValue;
465
+ };
466
+ var yValues = cellCollection(args[0].trim());
467
+ var xValues = cellCollection(args[1].trim());
468
+ if (isNullOrUndefined(yValues) || isNullOrUndefined(xValues) || (yValues.length < 2 && xValues.length < 2)) {
469
+ return errCollection[CommonErrors.DivZero];
470
+ }
471
+ else if (yValues.length !== xValues.length) {
472
+ return errCollection[CommonErrors.NA];
473
+ }
474
+ var dataCollection = function (actuaValue) {
475
+ actuaValue = _this.getDataCollection(actuaValue);
476
+ for (var b = 0; b < actuaValue.length; b++) {
477
+ if (errCollection.indexOf(actuaValue[b]) > -1) {
478
+ return actuaValue[b];
479
+ }
480
+ }
481
+ return actuaValue;
482
+ };
483
+ yValues = dataCollection(yValues);
484
+ if (errCollection.indexOf(yValues.toString()) > -1) {
485
+ return yValues.toString();
486
+ }
487
+ xValues = dataCollection(xValues);
488
+ if (errCollection.indexOf(xValues.toString()) > -1) {
489
+ return xValues.toString();
490
+ }
491
+ var sumY = 0;
492
+ var sumX = 0;
493
+ var length = 0;
494
+ var sumXY = 0;
495
+ var sumX2 = 0;
496
+ var diff;
497
+ var calculation = function (isSum) {
498
+ for (var i = 0, len = xValues.length; i < len; ++i) {
499
+ if ((yValues[i] !== '' && Number(yValues[i]).toString() !== 'NaN') &&
500
+ (xValues[i] !== '' && Number(xValues[i]).toString() !== 'NaN')) {
501
+ if (isSum) {
502
+ sumY += Number(yValues[i]);
503
+ sumX += Number(xValues[i]);
504
+ length++;
505
+ }
506
+ else {
507
+ diff = Number(xValues[i]) - sumX;
508
+ sumXY += diff * (Number(yValues[i]) - sumY);
509
+ sumX2 += diff * diff;
510
+ }
511
+ }
512
+ }
513
+ };
514
+ calculation(true);
515
+ sumY = sumY / length;
516
+ sumX = sumX / length;
517
+ calculation(false);
518
+ var value = (sumY - sumXY / sumX2 * sumX).toString();
519
+ if (value === 'NaN') {
520
+ return errCollection[CommonErrors.DivZero];
521
+ }
522
+ return value;
523
+ };
524
+ /**
525
+ * Returns the geometric mean of an array or range of positive data.
526
+ *
527
+ * Excel: `GEOMEAN(...)`.
528
+ *
529
+ * @hidden
530
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
531
+ * @returns {boolean} - Boolean result, nested-formula numeric string (`"0"`/`"1"`), or an Excel error token.
532
+ */
533
+ StatisticalAdvancedFormulas.prototype.ComputeGEOMEAN = function () {
534
+ var args = [];
535
+ for (var _i = 0; _i < arguments.length; _i++) {
536
+ args[_i] = arguments[_i];
537
+ }
538
+ var argArr = args;
539
+ var sum = 1;
540
+ var count = 0;
541
+ var cellVal = 0;
542
+ var cellStr = 0;
543
+ var dev;
544
+ var r;
545
+ var s;
546
+ var cell;
547
+ if (args.length === 0) {
548
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
549
+ }
550
+ if (argArr.length === 1 && argArr[0] === '') {
551
+ return sum.toString();
552
+ }
553
+ var isBoolean;
554
+ for (r = 0; r < argArr.length; r++) {
555
+ if (argArr[r].indexOf(':') > -1) {
556
+ if (argArr[0] === this.parent.tic) {
557
+ return this.parent.getErrorStrings()[CommonErrors.Value];
558
+ }
559
+ cell = this.parent.getCellCollection(argArr[r].split(this.parent.tic).join(''));
560
+ for (s = 0; s < cell.length; s++) {
561
+ cellVal = this.parent.getValueFromArg(cell[s]);
562
+ cellStr = cellVal.split(this.parent.tic).join('');
563
+ isBoolean = cellStr === this.parent.trueValue || cellStr === this.parent.falseValue;
564
+ dev = this.parent.parseFloat(cellVal);
565
+ if (dev <= 0) {
566
+ return this.parent.getErrorStrings()[CommonErrors.Num];
567
+ }
568
+ if (isBoolean || this.parent.getErrorStrings().indexOf(cellVal) > -1) {
569
+ continue;
570
+ }
571
+ else if (!isNaN(dev)) {
572
+ count++;
573
+ sum = sum * dev;
574
+ }
575
+ }
576
+ }
577
+ else {
578
+ cellVal = this.parent.getValueFromArg(argArr[r]);
579
+ if (this.parent.getErrorStrings().indexOf(cellVal) > -1) {
580
+ return cellVal;
581
+ }
582
+ var cellStr_1 = cellVal.split(this.parent.tic).join('');
583
+ if (cellVal.indexOf('"') > -1 && isNaN(this.parent.parseFloat(cellStr_1))) {
584
+ return this.parent.getErrorStrings()[CommonErrors.Value];
585
+ }
586
+ argArr[r] = argArr[r].startsWith('n') ? argArr[r].slice(1) : argArr[r];
587
+ if ((cellVal === '' && argArr[r] === '')) {
588
+ return this.parent.getErrorStrings()[CommonErrors.Num];
589
+ }
590
+ if ((cellStr_1 === 'TRUE' || cellStr_1 === 'FALSE') && this.parent.isCellReference(argArr[r])) {
591
+ continue;
592
+ }
593
+ if (cellVal.length > 0) {
594
+ cellVal = cellVal.indexOf('"') > -1 ? cellStr_1 : cellVal;
595
+ cellVal = (cellVal.split(this.parent.tic).join('') === 'TRUE') ? '1' :
596
+ (cellVal.split(this.parent.tic).join('') === 'FALSE') ? '0' : cellVal;
597
+ if (!this.parent.isCellReference(argArr[r])) {
598
+ if (isNaN(this.parent.parseFloat(cellVal))) {
599
+ return this.parent.getErrorStrings()[CommonErrors.Value];
600
+ }
601
+ }
602
+ dev = this.parent.parseFloat(cellVal);
603
+ if (dev <= 0) {
604
+ return this.parent.getErrorStrings()[CommonErrors.Num];
605
+ }
606
+ else if (!isNaN(dev)) {
607
+ count++;
608
+ sum = sum * dev;
609
+ }
610
+ }
611
+ }
612
+ }
613
+ if (count > 0) {
614
+ sum = Math.pow(sum, 1 / count);
615
+ }
616
+ return sum.toString();
617
+ };
618
+ /**
619
+ * Returns the square of the Pearson product moment correlation coefficient based on data points in known_ys and known_xs.
620
+ *
621
+ * Excel: `RSQ(...)`.
622
+ *
623
+ * @hidden
624
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
625
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
626
+ */
627
+ StatisticalAdvancedFormulas.prototype.ComputeRSQ = function () {
628
+ var args = [];
629
+ for (var _i = 0; _i < arguments.length; _i++) {
630
+ args[_i] = arguments[_i];
631
+ }
632
+ var validCount = 0;
633
+ var argArr = args;
634
+ if (argArr.length !== 2) {
635
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
636
+ }
637
+ if (argArr[0] === '' || argArr[1] === '') {
638
+ return this.parent.getErrorStrings()[CommonErrors.Value];
639
+ }
640
+ if (argArr[0].includes('"') || argArr[1].includes('"')) {
641
+ return this.parent.getErrorStrings()[CommonErrors.NA];
642
+ }
643
+ if ((argArr[0].indexOf(':') === -1 && isCellReference(argArr[0])) && (argArr[1].indexOf(':') === -1 && isCellReference(argArr[1]))) {
644
+ return this.parent.getErrorStrings()[CommonErrors.DivZero];
645
+ }
646
+ var yValuesRange = this.parent.getCellCollection(argArr[0]);
647
+ var xValuesRange = this.parent.getCellCollection(argArr[1]);
648
+ if ((yValuesRange.length !== xValuesRange.length)) {
649
+ return this.parent.getErrorStrings()[CommonErrors.NA];
650
+ }
651
+ var xValues = this.getDataCollection(xValuesRange);
652
+ for (var a = 0; a < xValues.length; a++) {
653
+ if (this.parent.getErrorStrings().indexOf(xValues[a]) > -1) {
654
+ return xValues[a];
655
+ }
656
+ }
657
+ var yValues = this.getDataCollection(yValuesRange);
658
+ for (var b = 0; b < yValues.length; b++) {
659
+ if (this.parent.getErrorStrings().indexOf(yValues[b]) > -1) {
660
+ return yValues[b];
661
+ }
662
+ }
663
+ var xValue;
664
+ var yValue;
665
+ for (var i = 0; i < xValues.length; i++) {
666
+ xValue = Number(xValues[i]);
667
+ yValue = Number(yValues[i]);
668
+ if (isNumber(xValue) && isNumber(yValue)) {
669
+ validCount++;
670
+ }
671
+ }
672
+ if (validCount <= 1) {
673
+ return this.parent.getErrorStrings()[CommonErrors.DivZero];
674
+ }
675
+ if (validCount === 2) {
676
+ return 1;
677
+ }
678
+ var meanArray = this.getMeanArray(xValues, yValues);
679
+ var meanX = meanArray[0];
680
+ var meanY = meanArray[1];
681
+ var correlation = this.getCorrelation(xValues, yValues, meanX, meanY);
682
+ return Math.pow(correlation, 2);
683
+ };
684
+ /**
685
+ * @hidden
686
+ * @param {string[]} xValues - specify the x values
687
+ * @param {string[]} yValues - specify the y values
688
+ * @param {number} meanX - specify the mean of x values
689
+ * @param {number} meanY - specify the mean of y values
690
+ * @returns {number} - Returns correlation value
691
+ */
692
+ /**
693
+ * @hidden
694
+ * @param {string[]} xValues - specify the x values
695
+ * @param {string[]} yValues - specify the y values
696
+ * @param {number} meanX - specify the mean of x values
697
+ * @param {number} meanY - specify the mean of y values
698
+ * @returns {number} - Returns correlation value
699
+ */
700
+ StatisticalAdvancedFormulas.prototype.getCorrelation = function (xValues, yValues, meanX, meanY) {
701
+ var numerator = 0;
702
+ var denominatorX = 0;
703
+ var denominatorY = 0;
704
+ var diffY;
705
+ var diffX;
706
+ for (var i = 0; i < xValues.length; i++) {
707
+ if (isNumber(xValues[i]) && isNumber(yValues[i])) {
708
+ diffX = Number(xValues[i]) - meanX;
709
+ diffY = Number(yValues[i]) - meanY;
710
+ numerator += diffX * diffY;
711
+ denominatorX += Math.pow(diffX, 2);
712
+ denominatorY += Math.pow(diffY, 2);
713
+ }
714
+ }
715
+ var correlation = numerator / Math.sqrt(denominatorX * denominatorY);
716
+ return correlation;
717
+ };
718
+ /**
719
+ * @hidden
720
+ * @param {string[]} xValues - specify the x values
721
+ * @param {string[]} yValues - specify the y values
722
+ * @returns {number[]} meanX - returns array of mean values of x and y values
723
+ */
724
+ /**
725
+ * @hidden
726
+ * @param {string[]} xValues - specify the x values
727
+ * @param {string[]} yValues - specify the y values
728
+ * @returns {number[]} meanX - returns array of mean values of x and y values
729
+ */
730
+ StatisticalAdvancedFormulas.prototype.getMeanArray = function (xValues, yValues) {
731
+ var count = 0;
732
+ var sumX = 0;
733
+ var sumY = 0;
734
+ var meanX = 0;
735
+ var meanY = 0;
736
+ for (var i = 0; i < xValues.length; i++) {
737
+ if (isNumber(xValues[i]) && isNumber(yValues[i])) {
738
+ sumX += Number(xValues[i]);
739
+ sumY += Number(yValues[i]);
740
+ count++;
741
+ }
742
+ }
743
+ meanX = sumX / count;
744
+ meanY = sumY / count;
745
+ return [meanX, meanY];
746
+ };
747
+ StatisticalAdvancedFormulas.prototype.getDataCollection = function (cells) {
748
+ var cellsData = [];
749
+ for (var i = 0, len = cells.length; i < len; i++) {
750
+ cellsData.push(this.parent.getValueFromArg(cells[i]));
751
+ }
752
+ return cellsData;
753
+ };
754
+ return StatisticalAdvancedFormulas;
755
+ }(FormulaModuleBase));
756
+ export { StatisticalAdvancedFormulas };