typeInput={data: Point[];// data samplek: number;// number of clusterslimit?: number;// max times to run kMeans iteration until convergence, defaults to Infinitycentroids?: Point[],// predefined centroids// precision?: number, // TODO add float point precision option};typeResult={clusters: Point[][],// data separated into clusterscentroids: Point[],// final centroidsiterations: number,// number of times kMeans did reclusterizationtotalDistance: number,// sum of distances from examples to each cluster center};typePoint=number[];/** * @throws error if invalid data provided */functionclusterize({k, data, centroids, limit =Infinity}: Input): Result