UNPKG

@turnbuckle/aprs-calculator-services

Version:

Anchorpoint Risk Calculator Service.

96 lines (95 loc) 3.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.lambda = exports.dlambda = exports.nlambda = exports.nthPowerMatrix = exports.diagonalMatrix = exports.createMatrix = exports.createNumberArray = exports.applyAgeAnalysisCalculations = void 0; var mathjs_1 = require("mathjs"); var date_and_time_module_1 = require("./date-and-time.module"); var sort_module_1 = require("./sort.module"); /** * Dependencies on mathjs v11.x */ function applyAgeAnalysisCalculations(ageAnalysis) { if (ageAnalysis.length > 0) { (0, sort_module_1.sortByDateAscending)(ageAnalysis); var maxDate = ageAnalysis[ageAnalysis.length - 1].date; (0, sort_module_1.sortByTransactionNumberAndThenDate)(ageAnalysis); for (var i = 0; i < ageAnalysis.length; i++) { ageAnalysis[i].rating2 = 0; ageAnalysis[i].dlambda = 0; if (i < ageAnalysis.length - 1) { if (ageAnalysis[i].transactionNumber === ageAnalysis[i + 1].transactionNumber) { ageAnalysis[i].rating2 = ageAnalysis[i + 1].rating; ageAnalysis[i].dlambda = (0, date_and_time_module_1.daysDiff)(ageAnalysis[i].date, ageAnalysis[i + 1].date) / 365; } else { ageAnalysis[i].dlambda = (0, date_and_time_module_1.daysDiff)(ageAnalysis[i].date, maxDate) / 365; } } } } return ageAnalysis; } exports.applyAgeAnalysisCalculations = applyAgeAnalysisCalculations; function createNumberArray(dimension, defaultValue) { if (defaultValue === void 0) { defaultValue = 0; } return new Array(dimension).fill(defaultValue); } exports.createNumberArray = createNumberArray; function createMatrix(dimension, defaultValue) { if (defaultValue === void 0) { defaultValue = 0; } return createNumberArray(dimension).map(function () { return createNumberArray(dimension, defaultValue); }); } exports.createMatrix = createMatrix; function diagonalMatrix(dimension, diagonalValue) { var output = createMatrix(dimension); for (var i = 0; i < output.length; i++) { output[i][i] = diagonalValue; } return output; } exports.diagonalMatrix = diagonalMatrix; function nthPowerMatrix(matrix, k) { var output = matrix; for (var i = 1; i < k; i++) { output = (0, mathjs_1.multiply)(output, matrix); } return output; } exports.nthPowerMatrix = nthPowerMatrix; function nlambda(ageAnalysis, maxRating, absorbingStates) { var output = createMatrix(maxRating); var absorbingRowStart = maxRating - absorbingStates; for (var i = 0; i < ageAnalysis.length; i++) { var item = ageAnalysis[i]; if (item.rating2 !== 0) { if (item.rating <= absorbingRowStart) { output[item.rating - 1][item.rating2 - 1]++; } } } return output; } exports.nlambda = nlambda; function dlambda(ageAnalysis, maxRating) { var output = new Array(maxRating).fill(0); for (var i = 0; i < ageAnalysis.length; i++) { output[ageAnalysis[i].rating - 1] += ageAnalysis[i].dlambda; } return output; } exports.dlambda = dlambda; function lambda(nlambdaMatrix, dlambdaMatrix) { var output = createMatrix(nlambdaMatrix.length); for (var row = 0; row < output.length; row++) { for (var col = 0; col < output[row].length; col++) { if (row !== col) { if (dlambdaMatrix[row] !== 0) { var lValue = nlambdaMatrix[row][col] / dlambdaMatrix[row]; output[row][col] = lValue; output[row][row] -= output[row][col]; } } } } return output; } exports.lambda = lambda;