From 5ed7a06ce81d2d2a8ad26a22dc18105dffc86d26 Mon Sep 17 00:00:00 2001 From: Adam Zerella Date: Sat, 28 Mar 2020 03:43:08 +1030 Subject: [PATCH] Add typing for "skmeans" (#43059) Co-authored-by: Adam Zerella --- types/skmeans/index.d.ts | 33 +++++++++++++++++++++++++++++++++ types/skmeans/skmeans-tests.ts | 21 +++++++++++++++++++++ types/skmeans/tsconfig.json | 25 +++++++++++++++++++++++++ types/skmeans/tslint.json | 3 +++ 4 files changed, 82 insertions(+) create mode 100644 types/skmeans/index.d.ts create mode 100644 types/skmeans/skmeans-tests.ts create mode 100644 types/skmeans/tsconfig.json create mode 100644 types/skmeans/tslint.json diff --git a/types/skmeans/index.d.ts b/types/skmeans/index.d.ts new file mode 100644 index 0000000000..c9409942fe --- /dev/null +++ b/types/skmeans/index.d.ts @@ -0,0 +1,33 @@ +// Type definitions for skmeans 0.11 +// Project: https://github.com/solzimer/skmeans +// Definitions by: Adam Zerella +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +type CentroidValues = 'kmrand' | 'kmpp' | null; + +interface Data { + it: number; + k: number; + centroids: number; + idxs: number[]; + test: (x: number, point?: (x1: number, x2: number) => number) => void; +} + +/** + * Calculates unidimiensional and multidimensional k-means clustering on data. + * + * @param data Unidimiensional or multidimensional array of values to be clustered. + * @param k Number of clusters. + * @param centroids Initial centroid values. + * @param iterations Maximum number of iterations. If not provided, it will be set to 10000. + * @param distance Custom distance function. Takes two points as arguments and returns a scalar number. + */ +declare function skmeans( + data: number[] | number[][], + k: number, + centroids?: CentroidValues, + iterations?: number | null, + distance?: (x: number, y: number) => number +): Data; + +export = skmeans; diff --git a/types/skmeans/skmeans-tests.ts b/types/skmeans/skmeans-tests.ts new file mode 100644 index 0000000000..c983c58b0d --- /dev/null +++ b/types/skmeans/skmeans-tests.ts @@ -0,0 +1,21 @@ +import skmeans = require('skmeans'); + +const dataUni = [0, 1, 3, 6, 8, 3]; + +const dataMulti = [[0, 3, 4], [5, 4, 9]]; + +skmeans(dataUni, 4, "kmrand"); + +skmeans(dataUni, 3, "kmpp"); + +skmeans(dataMulti, 6); + +skmeans(dataMulti, 3, null, 10); + +skmeans(dataMulti, 3, null, null, (x1, x2) => Math.abs(x1 - x2)); + +const res = skmeans(dataMulti, 3, null, 10); +res.test(6); + +const res2 = skmeans(dataMulti, 3, null, 10); +res2.test(6, (x1, x2) => Math.abs(x1 - x2)); diff --git a/types/skmeans/tsconfig.json b/types/skmeans/tsconfig.json new file mode 100644 index 0000000000..75905ac5a2 --- /dev/null +++ b/types/skmeans/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [ + + ], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "skmeans-tests.ts" + ] +} diff --git a/types/skmeans/tslint.json b/types/skmeans/tslint.json new file mode 100644 index 0000000000..e60c15844f --- /dev/null +++ b/types/skmeans/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "dtslint/dt.json" +} \ No newline at end of file