type t = DistributionTypes.genericDist type error = DistributionTypes.error type toPointSetFn = t => result type toSampleSetFn = t => result type scaleMultiplyFn = (t, float) => result type pointwiseAddFn = (t, t) => result let sampleN: (t, int) => array let toSampleSetDist: (t, int) => Belt.Result.t let fromFloat: float => t let toString: t => string let normalize: t => t let isNormalized: t => bool let toFloatOperation: ( t, ~toPointSetFn: toPointSetFn, ~distToFloatOperation: DistributionTypes.DistributionOperation.toFloat, ) => result module Score: { let klDivergence: (t, t, ~toPointSetFn: toPointSetFn) => result let logScoreWithPointResolution: ( option, t, float, ~toPointSetFn: toPointSetFn, ) => result } @genType let toPointSet: ( t, ~xyPointLength: int, ~sampleCount: int, ~xSelection: DistributionTypes.DistributionOperation.pointsetXSelection=?, unit, ) => result let toSparkline: (t, ~sampleCount: int, ~bucketCount: int=?, unit) => result let truncate: ( t, ~toPointSetFn: toPointSetFn, ~leftCutoff: option=?, ~rightCutoff: option=?, unit, ) => result let algebraicCombination: ( ~strategy: DistributionTypes.asAlgebraicCombinationStrategy, t, ~toPointSetFn: toPointSetFn, ~toSampleSetFn: toSampleSetFn, ~arithmeticOperation: Operation.algebraicOperation, ~t2: t, ) => result let pointwiseCombination: ( t, ~toPointSetFn: toPointSetFn, ~algebraicCombination: Operation.algebraicOperation, ~t2: t, ) => result let pointwiseCombinationFloat: ( t, ~toPointSetFn: toPointSetFn, ~algebraicCombination: Operation.algebraicOperation, ~f: float, ) => result let mixture: ( array<(t, float)>, ~scaleMultiplyFn: scaleMultiplyFn, ~pointwiseAddFn: pointwiseAddFn, ) => result let isSymbolic: t => bool let isPointSet: t => bool