From e964385bc1f8588bbaa80555fc34a38d8d8dbe84 Mon Sep 17 00:00:00 2001 From: Ben Weissmann Date: Wed, 4 Sep 2019 17:51:16 -0400 Subject: [PATCH] Add types for multivariate-normal (#37989) * Add multivariate-normal * Update metadata * Remove patch version * Improve tests and immutability annotations * Allow readonly array in mutators --- types/multivariate-normal/index.d.ts | 17 +++++++++ .../multivariate-normal-tests.ts | 35 +++++++++++++++++++ types/multivariate-normal/tsconfig.json | 23 ++++++++++++ types/multivariate-normal/tslint.json | 1 + 4 files changed, 76 insertions(+) create mode 100644 types/multivariate-normal/index.d.ts create mode 100644 types/multivariate-normal/multivariate-normal-tests.ts create mode 100644 types/multivariate-normal/tsconfig.json create mode 100644 types/multivariate-normal/tslint.json diff --git a/types/multivariate-normal/index.d.ts b/types/multivariate-normal/index.d.ts new file mode 100644 index 0000000000..80ab120ef1 --- /dev/null +++ b/types/multivariate-normal/index.d.ts @@ -0,0 +1,17 @@ +// Type definitions for multivariate-normal 0.1 +// Project: https://github.com/tulip/multivariate-normal-js#readme +// Definitions by: Ben Weissmann +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +export interface Distribution { + sample(): number[]; + getMean(): ReadonlyArray; + setMean(newMean: ReadonlyArray): Distribution; + getCov(): ReadonlyArray>; + setCov(newCov: ReadonlyArray>): Distribution; +} + +export default function MultivariateNormal( + mean: ReadonlyArray, + cov: ReadonlyArray>, +): Distribution; diff --git a/types/multivariate-normal/multivariate-normal-tests.ts b/types/multivariate-normal/multivariate-normal-tests.ts new file mode 100644 index 0000000000..6c1136049d --- /dev/null +++ b/types/multivariate-normal/multivariate-normal-tests.ts @@ -0,0 +1,35 @@ +import MultivariateNormal from 'multivariate-normal'; + +// Test constructing using mutable and literal arrays +const mutArray: number[] = [1, 2, 3]; +const dist = MultivariateNormal(mutArray, [[0, 0, 1], [0, 1, 0], [1, 0, 0]]); + +// Test methods for creating a new distribution from an existing one using +// mutable and literal arrays +const mutArray2: number[] = [4, 5, 6]; +const newDist = dist.setMean(mutArray2).setCov([[0, 0, 1], [0, 1, 0], [1, 0, 0]]); + +// Test accessors +const newMean: ReadonlyArray = newDist.getMean(); +const newCov: ReadonlyArray> = newDist.getCov(); + +// Mean and covariance are immutable + +// $ExpectError +newDist.getMean()[0] = 10; + +// $ExpectError +newDist.getCov()[0] = [1, 2, 3]; + +// $ExpectError +newDist.getCov()[0][0] = 10; + +// Samples are mutable +const sample: number[] = newDist.sample(); +sample[0] = 123; + +// Check that we can pass immutable arrays into the constructor or mutators +MultivariateNormal(newDist.getMean(), newDist.getCov()); + +newDist.setCov(dist.getCov()); +newDist.setMean(dist.getMean()); diff --git a/types/multivariate-normal/tsconfig.json b/types/multivariate-normal/tsconfig.json new file mode 100644 index 0000000000..20334dba61 --- /dev/null +++ b/types/multivariate-normal/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "multivariate-normal-tests.ts" + ] +} diff --git a/types/multivariate-normal/tslint.json b/types/multivariate-normal/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/multivariate-normal/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }