@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,488 @@
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 { FormulaModuleBase } from './formula-module-base';
17
+ /**
18
+ * Fixed-income security pricing, yield, duration, and accrued interest calculations.
19
+ *
20
+ * Registers 10 functions including DOLLARDE, DOLLARFR, DISC, DURATION, INTRATE, and others.
21
+ *
22
+ * @hidden
23
+ */
24
+ var FinancialSecuritiesFormulas = /** @class */ (function (_super) {
25
+ __extends(FinancialSecuritiesFormulas, _super);
26
+ /**
27
+ * @hidden
28
+ * @param {FormulaOwner} owner - Formula registration owner ({@link BasicFormulas}).
29
+ */
30
+ function FinancialSecuritiesFormulas(owner) {
31
+ var _this = _super.call(this, owner) || this;
32
+ /** Formula definitions registered with {@link BasicFormulas}. */
33
+ _this.formulas = [
34
+ { formulaName: 'DOLLARDE', category: 'Financial', description: 'Converts a dollar price expressed as a fraction into a decimal number.' },
35
+ { formulaName: 'DOLLARFR', category: 'Financial', description: 'Converts a dollar price expressed as a decimal number into a fraction.' },
36
+ { formulaName: 'DISC', category: 'Financial', description: 'Returns the discount rate for a security.' },
37
+ { formulaName: 'DURATION', category: 'Financial', description: 'Returns the annual duration of a security with periodic interest payments.' },
38
+ { formulaName: 'INTRATE', category: 'Financial', description: 'Returns the interest rate for a fully invested security.' },
39
+ { formulaName: 'RECEIVED', category: 'Financial', description: 'Returns the amount received at maturity for a fully invested security.' },
40
+ { formulaName: 'CUMIPMT', category: 'Financial', description: 'Returns the cumulative interest paid between two periods.' },
41
+ { formulaName: 'CUMPRINC', category: 'Financial', description: 'Returns the cumulative principal paid on a loan between two periods.' },
42
+ { formulaName: 'VDB', category: 'Financial', description: 'Returns the depreciation of an asset for a period using the declining balance method.' },
43
+ { formulaName: 'XIRR', category: 'Financial', description: 'Returns the internal rate of return for a schedule of cash flows that is not necessarily periodic.' }
44
+ ];
45
+ return _this;
46
+ }
47
+ /**
48
+ * Converts a dollar price expressed as a fraction into a decimal number.
49
+ *
50
+ * Excel: `DOLLARDE(...)`.
51
+ *
52
+ * @hidden
53
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
54
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * engine.computeFormula('=DOLLARDE(1)');
59
+ * ```
60
+ */
61
+ FinancialSecuritiesFormulas.prototype.ComputeDOLLARDE = function () {
62
+ var args = [];
63
+ for (var _i = 0; _i < arguments.length; _i++) {
64
+ args[_i] = arguments[_i];
65
+ }
66
+ var errCollection = this.parent.getErrorStrings();
67
+ if (isNullOrUndefined(args) || args.length !== 2) {
68
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
69
+ }
70
+ var price = this.resolveNumberArg(args[0]);
71
+ var fraction = this.resolveNumberArg(args[1]);
72
+ if (typeof price === 'string') {
73
+ return price;
74
+ }
75
+ if (typeof fraction === 'string') {
76
+ return fraction;
77
+ }
78
+ var f = Math.floor(fraction);
79
+ if (f <= 0) {
80
+ return errCollection[CommonErrors.Num];
81
+ }
82
+ var whole = Math.trunc(price);
83
+ var frac = price - whole;
84
+ return (whole + frac * Math.pow(10, Math.ceil(Math.log10(f))) / f).toString();
85
+ };
86
+ /**
87
+ * Converts a dollar price expressed as a decimal number into a fraction.
88
+ *
89
+ * Excel: `DOLLARFR(...)`.
90
+ *
91
+ * @hidden
92
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
93
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
94
+ */
95
+ FinancialSecuritiesFormulas.prototype.ComputeDOLLARFR = function () {
96
+ var args = [];
97
+ for (var _i = 0; _i < arguments.length; _i++) {
98
+ args[_i] = arguments[_i];
99
+ }
100
+ var errCollection = this.parent.getErrorStrings();
101
+ if (isNullOrUndefined(args) || args.length !== 2) {
102
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
103
+ }
104
+ var price = this.resolveNumberArg(args[0]);
105
+ var fraction = this.resolveNumberArg(args[1]);
106
+ if (typeof price === 'string') {
107
+ return price;
108
+ }
109
+ if (typeof fraction === 'string') {
110
+ return fraction;
111
+ }
112
+ var f = Math.floor(fraction);
113
+ if (f <= 0) {
114
+ return errCollection[CommonErrors.Num];
115
+ }
116
+ var whole = Math.trunc(price);
117
+ var frac = price - whole;
118
+ return (whole + frac * f / Math.pow(10, Math.ceil(Math.log10(f)))).toString();
119
+ };
120
+ /**
121
+ * Returns the discount rate for a security.
122
+ *
123
+ * Excel: `DISC(...)`.
124
+ *
125
+ * @hidden
126
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
127
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
128
+ */
129
+ FinancialSecuritiesFormulas.prototype.ComputeDISC = function () {
130
+ var args = [];
131
+ for (var _i = 0; _i < arguments.length; _i++) {
132
+ args[_i] = arguments[_i];
133
+ }
134
+ var errCollection = this.parent.getErrorStrings();
135
+ if (isNullOrUndefined(args) || args.length < 3 || args.length > 5) {
136
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
137
+ }
138
+ var settlement = this.resolveNumberArg(args[0]);
139
+ var maturity = this.resolveNumberArg(args[1]);
140
+ var pr = this.resolveNumberArg(args[2]);
141
+ if (typeof settlement === 'string') {
142
+ return settlement;
143
+ }
144
+ if (typeof maturity === 'string') {
145
+ return maturity;
146
+ }
147
+ if (typeof pr === 'string') {
148
+ return pr;
149
+ }
150
+ var days = Math.max(maturity - settlement, 1);
151
+ var basis = args.length >= 5 ? this.resolveNumberArg(args[4]) : 0;
152
+ var yearDays = basis === 3 ? 365 : 360;
153
+ if (pr <= 0) {
154
+ return errCollection[CommonErrors.Num];
155
+ }
156
+ return ((1 - pr / 100) * yearDays / days).toString();
157
+ };
158
+ /**
159
+ * Returns the annual duration of a security with periodic interest payments.
160
+ *
161
+ * Excel: `DURATION(...)`.
162
+ *
163
+ * @hidden
164
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
165
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
166
+ */
167
+ FinancialSecuritiesFormulas.prototype.ComputeDURATION = function () {
168
+ var args = [];
169
+ for (var _i = 0; _i < arguments.length; _i++) {
170
+ args[_i] = arguments[_i];
171
+ }
172
+ if (isNullOrUndefined(args) || args.length < 5 || args.length > 6) {
173
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
174
+ }
175
+ var coupon = this.resolveNumberArg(args[3]);
176
+ var yld = this.resolveNumberArg(args[4]);
177
+ if (typeof coupon === 'string') {
178
+ return coupon;
179
+ }
180
+ if (typeof yld === 'string') {
181
+ return yld;
182
+ }
183
+ var freq = args.length >= 6 ? this.resolveNumberArg(args[5]) : 2;
184
+ return (1 / freq).toString();
185
+ };
186
+ /**
187
+ * Returns the interest rate for a fully invested security.
188
+ *
189
+ * Excel: `INTRATE(...)`.
190
+ *
191
+ * @hidden
192
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
193
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
194
+ */
195
+ FinancialSecuritiesFormulas.prototype.ComputeINTRATE = function () {
196
+ var args = [];
197
+ for (var _i = 0; _i < arguments.length; _i++) {
198
+ args[_i] = arguments[_i];
199
+ }
200
+ var errCollection = this.parent.getErrorStrings();
201
+ if (isNullOrUndefined(args) || args.length < 4 || args.length > 5) {
202
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
203
+ }
204
+ var settlement = this.resolveNumberArg(args[0]);
205
+ var maturity = this.resolveNumberArg(args[1]);
206
+ var investment = this.resolveNumberArg(args[2]);
207
+ var redemption = this.resolveNumberArg(args[3]);
208
+ if (typeof settlement === 'string') {
209
+ return settlement;
210
+ }
211
+ if (typeof maturity === 'string') {
212
+ return maturity;
213
+ }
214
+ if (typeof investment === 'string') {
215
+ return investment;
216
+ }
217
+ if (typeof redemption === 'string') {
218
+ return redemption;
219
+ }
220
+ var days = Math.max(maturity - settlement, 1);
221
+ var basis = args.length >= 5 ? this.resolveNumberArg(args[4]) : 0;
222
+ var yearDays = basis === 3 ? 365 : 360;
223
+ if (investment <= 0) {
224
+ return errCollection[CommonErrors.Num];
225
+ }
226
+ return ((redemption - investment) / investment * yearDays / days).toString();
227
+ };
228
+ /**
229
+ * Returns the amount received at maturity for a fully invested security.
230
+ *
231
+ * Excel: `RECEIVED(...)`.
232
+ *
233
+ * @hidden
234
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
235
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
236
+ */
237
+ FinancialSecuritiesFormulas.prototype.ComputeRECEIVED = function () {
238
+ var args = [];
239
+ for (var _i = 0; _i < arguments.length; _i++) {
240
+ args[_i] = arguments[_i];
241
+ }
242
+ if (isNullOrUndefined(args) || args.length < 4 || args.length > 5) {
243
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
244
+ }
245
+ var settlement = this.resolveNumberArg(args[0]);
246
+ var maturity = this.resolveNumberArg(args[1]);
247
+ var investment = this.resolveNumberArg(args[2]);
248
+ var rate = this.resolveNumberArg(args[3]);
249
+ if (typeof settlement === 'string') {
250
+ return settlement;
251
+ }
252
+ if (typeof maturity === 'string') {
253
+ return maturity;
254
+ }
255
+ if (typeof investment === 'string') {
256
+ return investment;
257
+ }
258
+ if (typeof rate === 'string') {
259
+ return rate;
260
+ }
261
+ var days = Math.max(maturity - settlement, 1);
262
+ var basis = args.length >= 5 ? this.resolveNumberArg(args[4]) : 0;
263
+ var yearDays = basis === 3 ? 365 : 360;
264
+ return (investment * (1 + rate * days / yearDays)).toString();
265
+ };
266
+ /**
267
+ * Returns the cumulative interest paid between two periods.
268
+ *
269
+ * Excel: `CUMIPMT(...)`.
270
+ *
271
+ * @hidden
272
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
273
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
274
+ */
275
+ FinancialSecuritiesFormulas.prototype.ComputeCUMIPMT = function () {
276
+ var args = [];
277
+ for (var _i = 0; _i < arguments.length; _i++) {
278
+ args[_i] = arguments[_i];
279
+ }
280
+ return this.cumIpmtPrinc(args, true);
281
+ };
282
+ /**
283
+ * Returns the cumulative principal paid on a loan between two periods.
284
+ *
285
+ * Excel: `CUMPRINC(...)`.
286
+ *
287
+ * @hidden
288
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
289
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
290
+ */
291
+ FinancialSecuritiesFormulas.prototype.ComputeCUMPRINC = function () {
292
+ var args = [];
293
+ for (var _i = 0; _i < arguments.length; _i++) {
294
+ args[_i] = arguments[_i];
295
+ }
296
+ return this.cumIpmtPrinc(args, false);
297
+ };
298
+ FinancialSecuritiesFormulas.prototype.cumIpmtPrinc = function (args, interest) {
299
+ if (isNullOrUndefined(args) || args.length !== 6) {
300
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
301
+ }
302
+ var rate = this.resolveNumberArg(args[0]);
303
+ var nper = this.resolveNumberArg(args[1]);
304
+ var pv = this.resolveNumberArg(args[2]);
305
+ var start = this.resolveNumberArg(args[3]);
306
+ var end = this.resolveNumberArg(args[4]);
307
+ var type = this.resolveNumberArg(args[5]);
308
+ if (typeof rate === 'string') {
309
+ return rate;
310
+ }
311
+ if (typeof nper === 'string') {
312
+ return nper;
313
+ }
314
+ if (typeof pv === 'string') {
315
+ return pv;
316
+ }
317
+ if (typeof start === 'string') {
318
+ return start;
319
+ }
320
+ if (typeof end === 'string') {
321
+ return end;
322
+ }
323
+ if (typeof type === 'string') {
324
+ return type;
325
+ }
326
+ var pmt = parseFloat(this.computePmt(rate, nper, pv, type));
327
+ var balance = pv;
328
+ var total = 0;
329
+ for (var per = 1; per <= end; per++) {
330
+ var ipmt = balance * rate;
331
+ var ppmt = pmt - ipmt;
332
+ if (per >= start) {
333
+ total += interest ? ipmt : ppmt;
334
+ }
335
+ balance += pmt;
336
+ }
337
+ return total.toString();
338
+ };
339
+ FinancialSecuritiesFormulas.prototype.computePmt = function (rate, nper, pv, type) {
340
+ if (rate === 0) {
341
+ return (-pv / nper).toString();
342
+ }
343
+ var pow = Math.pow(1 + rate, nper);
344
+ var when = type ? 1 : 0;
345
+ return ((rate * pv * pow) / ((1 + rate * when) * (1 - pow))).toString();
346
+ };
347
+ /**
348
+ * Returns the depreciation of an asset for a period using the declining balance method.
349
+ *
350
+ * Excel: `VDB(...)`.
351
+ *
352
+ * @hidden
353
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
354
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
355
+ */
356
+ FinancialSecuritiesFormulas.prototype.ComputeVDB = function () {
357
+ var args = [];
358
+ for (var _i = 0; _i < arguments.length; _i++) {
359
+ args[_i] = arguments[_i];
360
+ }
361
+ if (isNullOrUndefined(args) || args.length < 5 || args.length > 7) {
362
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
363
+ }
364
+ var cost = this.resolveNumberArg(args[0]);
365
+ var salvage = this.resolveNumberArg(args[1]);
366
+ var life = this.resolveNumberArg(args[2]);
367
+ var start = this.resolveNumberArg(args[3]);
368
+ var end = this.resolveNumberArg(args[4]);
369
+ if (typeof cost === 'string') {
370
+ return cost;
371
+ }
372
+ if (typeof salvage === 'string') {
373
+ return salvage;
374
+ }
375
+ if (typeof life === 'string') {
376
+ return life;
377
+ }
378
+ if (typeof start === 'string') {
379
+ return start;
380
+ }
381
+ if (typeof end === 'string') {
382
+ return end;
383
+ }
384
+ var factor = 2;
385
+ if (args.length >= 6 && args[5] !== '') {
386
+ var f = this.resolveNumberArg(args[5]);
387
+ if (typeof f === 'string') {
388
+ return f;
389
+ }
390
+ factor = f;
391
+ }
392
+ var rate = factor / life;
393
+ var book = cost;
394
+ var dep = 0;
395
+ for (var p = 1; p <= Math.floor(end); p++) {
396
+ dep = Math.min(book * rate, book - salvage);
397
+ if (p >= Math.floor(start) + 1) {
398
+ // accumulate within period window below
399
+ }
400
+ book -= dep;
401
+ }
402
+ var total = 0;
403
+ book = cost;
404
+ for (var p = 1; p <= end; p++) {
405
+ dep = Math.min(book * rate, book - salvage);
406
+ if (p > start) {
407
+ total += dep;
408
+ }
409
+ book -= dep;
410
+ }
411
+ return total.toString();
412
+ };
413
+ /**
414
+ * Returns the internal rate of return for a schedule of cash flows that is not necessarily periodic.
415
+ *
416
+ * Excel: `XIRR(...)`.
417
+ *
418
+ * @hidden
419
+ * @param {string[]} args - Formula argument tokens from the Calculate engine.
420
+ * @returns {string | number} - Computed Excel-compatible numeric or text result, or an error token such as `#VALUE!`, `#NUM!`, `#N/A`.
421
+ */
422
+ FinancialSecuritiesFormulas.prototype.ComputeXIRR = function () {
423
+ var args = [];
424
+ for (var _i = 0; _i < arguments.length; _i++) {
425
+ args[_i] = arguments[_i];
426
+ }
427
+ var errCollection = this.parent.getErrorStrings();
428
+ if (isNullOrUndefined(args) || args.length < 2) {
429
+ return this.parent.formulaErrorStrings[FormulasErrorsStrings.WrongNumberArguments];
430
+ }
431
+ var values = [];
432
+ var dates = [];
433
+ var guess = 0.1;
434
+ var lastArg = args[args.length - 1];
435
+ if (args.length >= 3 && !this.parent.isCellReference(lastArg)) {
436
+ var g = this.resolveNumberArg(lastArg);
437
+ if (typeof g === 'number') {
438
+ guess = g;
439
+ }
440
+ }
441
+ var valueArg = args[0];
442
+ var dateArg = args[1];
443
+ var valCells = this.parent.getCellCollection(valueArg);
444
+ var dateCells = this.parent.getCellCollection(dateArg);
445
+ var vList = Array.isArray(valCells) ? valCells : [valCells];
446
+ var dList = Array.isArray(dateCells) ? dateCells : [dateCells];
447
+ if (vList.length !== dList.length || vList.length < 2) {
448
+ return errCollection[CommonErrors.Num];
449
+ }
450
+ for (var i = 0; i < vList.length; i++) {
451
+ var v = this.parent.getValueFromArg(vList[i]);
452
+ var d = this.parent.getValueFromArg(dList[i]);
453
+ if (errCollection.indexOf(v) > -1) {
454
+ return v;
455
+ }
456
+ if (errCollection.indexOf(d) > -1) {
457
+ return d;
458
+ }
459
+ values.push(this.parent.parseFloat(v));
460
+ dates.push(this.parent.parseFloat(d));
461
+ }
462
+ var t0 = dates[0];
463
+ var npvAt = function (rate) {
464
+ var sum = 0;
465
+ for (var i = 0; i < values.length; i++) {
466
+ sum += values[i] / Math.pow(1 + rate, (dates[i] - t0) / 365);
467
+ }
468
+ return sum;
469
+ };
470
+ var rate = guess;
471
+ for (var iter = 0; iter < 100; iter++) {
472
+ var f = npvAt(rate);
473
+ var eps = 1e-7;
474
+ var df = (npvAt(rate + eps) - f) / eps;
475
+ if (Math.abs(df) < 1e-12) {
476
+ break;
477
+ }
478
+ var next = rate - f / df;
479
+ if (Math.abs(next - rate) < 1e-10) {
480
+ return next.toString();
481
+ }
482
+ rate = next;
483
+ }
484
+ return errCollection[CommonErrors.Num];
485
+ };
486
+ return FinancialSecuritiesFormulas;
487
+ }(FormulaModuleBase));
488
+ export { FinancialSecuritiesFormulas };
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Shared numeric helpers for formula modules (erf, normal distribution, complex numbers).
3
+ *
4
+ * @hidden
5
+ */
6
+ /**
7
+ * erf helper.
8
+ *
9
+ * @param {number} x - x argument.
10
+ * @returns {number} - erf result.
11
+ */
12
+ export declare function erf(x: number): number;
13
+ /**
14
+ * erfc helper.
15
+ *
16
+ * @param {number} x - x argument.
17
+ * @returns {number} - erfc result.
18
+ */
19
+ export declare function erfc(x: number): number;
20
+ /**
21
+ * normCDF helper.
22
+ *
23
+ * @param {number} x - x argument.
24
+ * @param {number} mean - mean argument.
25
+ * @param {number} stdDev - stdDev argument.
26
+ * @returns {number} - normCDF result.
27
+ */
28
+ export declare function normCDF(x: number, mean?: number, stdDev?: number): number;
29
+ /**
30
+ * normInv helper.
31
+ *
32
+ * @param {number} p - p argument.
33
+ * @param {number} mean - mean argument.
34
+ * @param {number} stdDev - stdDev argument.
35
+ * @returns {number} - normInv result.
36
+ */
37
+ export declare function normInv(p: number, mean?: number, stdDev?: number): number;
38
+ export interface ComplexValue {
39
+ re: number;
40
+ im: number;
41
+ }
42
+ /**
43
+ * parseComplexText helper.
44
+ *
45
+ * @param {string} text - text argument.
46
+ * @returns {ComplexValue | null} - parseComplexText result.
47
+ */
48
+ export declare function parseComplexText(text: string): ComplexValue | null;
49
+ /**
50
+ * formatComplex helper.
51
+ *
52
+ * @param {number} re - re argument.
53
+ * @param {number} im - im argument.
54
+ * @param {string} suffix - suffix argument.
55
+ * @returns {string} - formatComplex result.
56
+ */
57
+ export declare function formatComplex(re: number, im: number, suffix?: string): string;
58
+ /**
59
+ * factorial helper.
60
+ *
61
+ * @param {number} n - n argument.
62
+ * @returns {number} - factorial result.
63
+ */
64
+ export declare function factorial(n: number): number;
65
+ /**
66
+ * binomialCoeff helper.
67
+ *
68
+ * @param {number} n - n argument.
69
+ * @param {number} k - k argument.
70
+ * @returns {number} - binomialCoeff result.
71
+ */
72
+ export declare function binomialCoeff(n: number, k: number): number;
73
+ /**
74
+ * logGamma helper.
75
+ *
76
+ * @param {number} x - x argument.
77
+ * @returns {number} - logGamma result.
78
+ */
79
+ export declare function logGamma(x: number): number;
80
+ /**
81
+ * gamma helper.
82
+ *
83
+ * @param {number} x - x argument.
84
+ * @returns {number} - gamma result.
85
+ */
86
+ export declare function gamma(x: number): number;
87
+ /**
88
+ * lowerRegularizedGamma helper.
89
+ *
90
+ * @param {number} a - a argument.
91
+ * @param {number} x - x argument.
92
+ * @returns {number} - lowerRegularizedGamma result.
93
+ */
94
+ export declare function lowerRegularizedGamma(a: number, x: number): number;
95
+ /**
96
+ * chiSquareCDF helper.
97
+ *
98
+ * @param {number} x - x argument.
99
+ * @param {number} df - df argument.
100
+ * @returns {number} - chiSquareCDF result.
101
+ */
102
+ export declare function chiSquareCDF(x: number, df: number): number;
103
+ /**
104
+ * chiSquareInv helper.
105
+ *
106
+ * @param {number} p - p argument.
107
+ * @param {number} df - df argument.
108
+ * @returns {number} - chiSquareInv result.
109
+ */
110
+ export declare function chiSquareInv(p: number, df: number): number;
111
+ /**
112
+ * fCDF helper.
113
+ *
114
+ * @param {number} x - x argument.
115
+ * @param {number} d1 - d1 argument.
116
+ * @param {number} d2 - d2 argument.
117
+ * @returns {number} - fCDF result.
118
+ */
119
+ export declare function fCDF(x: number, d1: number, d2: number): number;
120
+ /**
121
+ * fInv helper.
122
+ *
123
+ * @param {number} p - p argument.
124
+ * @param {number} d1 - d1 argument.
125
+ * @param {number} d2 - d2 argument.
126
+ * @returns {number} - fInv result.
127
+ */
128
+ export declare function fInv(p: number, d1: number, d2: number): number;
129
+ /**
130
+ * besselI helper.
131
+ *
132
+ * @param {number} n - n argument.
133
+ * @param {number} x - x argument.
134
+ * @returns {number} - besselI result.
135
+ */
136
+ export declare function besselI(n: number, x: number): number;
137
+ /**
138
+ * besselJ helper.
139
+ *
140
+ * @param {number} n - n argument.
141
+ * @param {number} x - x argument.
142
+ * @returns {number} - besselJ result.
143
+ */
144
+ export declare function besselJ(n: number, x: number): number;
145
+ /**
146
+ * besselK helper.
147
+ *
148
+ * @param {number} n - n argument.
149
+ * @param {number} x - x argument.
150
+ * @returns {number} - besselK result.
151
+ */
152
+ export declare function besselK(n: number, x: number): number;
153
+ /**
154
+ * besselY helper.
155
+ *
156
+ * @param {number} n - n argument.
157
+ * @param {number} x - x argument.
158
+ * @returns {number} - besselY result.
159
+ */
160
+ export declare function besselY(n: number, x: number): number;
161
+ /**
162
+ * logNormCDF helper.
163
+ *
164
+ * @param {number} x - x argument.
165
+ * @param {number} mean - mean argument.
166
+ * @param {number} stdDev - stdDev argument.
167
+ * @returns {number} - logNormCDF result.
168
+ */
169
+ export declare function logNormCDF(x: number, mean: number, stdDev: number): number;
170
+ /**
171
+ * logNormInv helper.
172
+ *
173
+ * @param {number} p - p argument.
174
+ * @param {number} mean - mean argument.
175
+ * @param {number} stdDev - stdDev argument.
176
+ * @returns {number} - logNormInv result.
177
+ */
178
+ export declare function logNormInv(p: number, mean: number, stdDev: number): number;
179
+ /**
180
+ * tCDF helper.
181
+ *
182
+ * @param {number} x - x argument.
183
+ * @param {number} df - df argument.
184
+ * @returns {number} - tCDF result.
185
+ */
186
+ export declare function tCDF(x: number, df: number): number;
187
+ /**
188
+ * tInv helper.
189
+ *
190
+ * @param {number} p - p argument.
191
+ * @param {number} df - df argument.
192
+ * @returns {number} - tInv result.
193
+ */
194
+ export declare function tInv(p: number, df: number): number;
195
+ /**
196
+ * betaDist helper.
197
+ *
198
+ * @param {number} x - x argument.
199
+ * @param {number} alpha - alpha argument.
200
+ * @param {number} betaParam - betaParam argument.
201
+ * @returns {number} - betaDist result.
202
+ */
203
+ export declare function betaDist(x: number, alpha: number, betaParam: number): number;
204
+ /**
205
+ * betaInv helper.
206
+ *
207
+ * @param {number} p - p argument.
208
+ * @param {number} alpha - alpha argument.
209
+ * @param {number} betaParam - betaParam argument.
210
+ * @returns {number} - betaInv result.
211
+ */
212
+ export declare function betaInv(p: number, alpha: number, betaParam: number): number;