Rename invalidOperationError
This commit is contained in:
parent
4544268429
commit
df4b734a49
|
@ -11,7 +11,7 @@ type error =
|
||||||
| DistributionVerticalShiftIsInvalid
|
| DistributionVerticalShiftIsInvalid
|
||||||
| TooFewSamples
|
| TooFewSamples
|
||||||
| ArgumentError(string)
|
| ArgumentError(string)
|
||||||
| OperationError(Operation.Error.invalidOperationError)
|
| OperationError(Operation.Error.t)
|
||||||
| PointSetConversionError(SampleSetDist.pointsetConversionError)
|
| PointSetConversionError(SampleSetDist.pointsetConversionError)
|
||||||
| SparklineError(PointSetTypes.sparklineError) // This type of error is for when we find a sparkline of a discrete distribution. This should probably at some point be actually implemented
|
| SparklineError(PointSetTypes.sparklineError) // This type of error is for when we find a sparkline of a discrete distribution. This should probably at some point be actually implemented
|
||||||
| OtherError(string)
|
| OtherError(string)
|
||||||
|
@ -30,7 +30,7 @@ module Error = {
|
||||||
| DistributionVerticalShiftIsInvalid => "Distribution Vertical Shift is Invalid"
|
| DistributionVerticalShiftIsInvalid => "Distribution Vertical Shift is Invalid"
|
||||||
| ArgumentError(s) => `Argument Error ${s}`
|
| ArgumentError(s) => `Argument Error ${s}`
|
||||||
| TooFewSamples => "Too Few Samples"
|
| TooFewSamples => "Too Few Samples"
|
||||||
| OperationError(err) => Operation.Error.invalidOperationErrorToString(err)
|
| OperationError(err) => Operation.Error.toString(err)
|
||||||
| PointSetConversionError(err) => SampleSetDist.pointsetConversionErrorToString(err)
|
| PointSetConversionError(err) => SampleSetDist.pointsetConversionErrorToString(err)
|
||||||
| SparklineError(err) => PointSetTypes.sparklineErrorToString(err)
|
| SparklineError(err) => PointSetTypes.sparklineErrorToString(err)
|
||||||
| OtherError(s) => s
|
| OtherError(s) => s
|
||||||
|
|
|
@ -151,7 +151,7 @@ module AlgebraicCombination = {
|
||||||
arithmeticOperation: Operation.algebraicOperation,
|
arithmeticOperation: Operation.algebraicOperation,
|
||||||
t1: t,
|
t1: t,
|
||||||
t2: t,
|
t2: t,
|
||||||
): option<result<SymbolicDistTypes.symbolicDist, Operation.Error.invalidOperationError>> =>
|
): option<result<SymbolicDistTypes.symbolicDist, Operation.Error.t>> =>
|
||||||
switch (arithmeticOperation, t1, t2) {
|
switch (arithmeticOperation, t1, t2) {
|
||||||
| (arithmeticOperation, Symbolic(d1), Symbolic(d2)) =>
|
| (arithmeticOperation, Symbolic(d1), Symbolic(d2)) =>
|
||||||
switch SymbolicDist.T.tryAnalyticalSimplification(d1, d2, arithmeticOperation) {
|
switch SymbolicDist.T.tryAnalyticalSimplification(d1, d2, arithmeticOperation) {
|
||||||
|
|
|
@ -88,7 +88,7 @@ let stepwiseToLinear = (t: t): t =>
|
||||||
let combinePointwise = (
|
let combinePointwise = (
|
||||||
~integralSumCachesFn=(_, _) => None,
|
~integralSumCachesFn=(_, _) => None,
|
||||||
~distributionType: PointSetTypes.distributionType=#PDF,
|
~distributionType: PointSetTypes.distributionType=#PDF,
|
||||||
fn: (float, float) => result<float, Operation.Error.invalidOperationError>,
|
fn: (float, float) => result<float, Operation.Error.t>,
|
||||||
t1: PointSetTypes.continuousShape,
|
t1: PointSetTypes.continuousShape,
|
||||||
t2: PointSetTypes.continuousShape,
|
t2: PointSetTypes.continuousShape,
|
||||||
): result<PointSetTypes.continuousShape, 'e> => {
|
): result<PointSetTypes.continuousShape, 'e> => {
|
||||||
|
|
|
@ -60,10 +60,10 @@ let combinePointwise = (
|
||||||
PointSetTypes.continuousShape,
|
PointSetTypes.continuousShape,
|
||||||
PointSetTypes.continuousShape,
|
PointSetTypes.continuousShape,
|
||||||
) => option<PointSetTypes.continuousShape>=(_, _) => None,
|
) => option<PointSetTypes.continuousShape>=(_, _) => None,
|
||||||
fn: (float, float) => result<float, Operation.Error.invalidOperationError>,
|
fn: (float, float) => result<float, Operation.Error.t>,
|
||||||
t1: t,
|
t1: t,
|
||||||
t2: t,
|
t2: t,
|
||||||
): result<PointSetTypes.pointSetDist, Operation.Error.invalidOperationError> =>
|
): result<PointSetTypes.pointSetDist, Operation.Error.t> =>
|
||||||
switch (t1, t2) {
|
switch (t1, t2) {
|
||||||
| (Continuous(m1), Continuous(m2)) =>
|
| (Continuous(m1), Continuous(m2)) =>
|
||||||
Continuous.combinePointwise(
|
Continuous.combinePointwise(
|
||||||
|
|
|
@ -83,11 +83,10 @@ let sampleN = (t: t, n) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Figure out what to do if distributions are different lengths. ``zip`` is kind of inelegant for this.
|
//TODO: Figure out what to do if distributions are different lengths. ``zip`` is kind of inelegant for this.
|
||||||
let map2 = (
|
let map2 = (~fn: (float, float) => result<float, Operation.Error.t>, ~t1: t, ~t2: t): result<
|
||||||
~fn: (float, float) => result<float, Operation.Error.invalidOperationError>,
|
t,
|
||||||
~t1: t,
|
Operation.Error.t,
|
||||||
~t2: t,
|
> => {
|
||||||
): result<t, Operation.Error.invalidOperationError> => {
|
|
||||||
let samples = Belt.Array.zip(get(t1), get(t2))->E.A2.fmap(((a, b)) => fn(a, b))
|
let samples = Belt.Array.zip(get(t1), get(t2))->E.A2.fmap(((a, b)) => fn(a, b))
|
||||||
|
|
||||||
// This assertion should never be reached. In order for it to be reached, one
|
// This assertion should never be reached. In order for it to be reached, one
|
||||||
|
|
|
@ -45,6 +45,6 @@ type symbolicDist = [
|
||||||
|
|
||||||
type analyticalSimplificationResult = [
|
type analyticalSimplificationResult = [
|
||||||
| #AnalyticalSolution(symbolicDist)
|
| #AnalyticalSolution(symbolicDist)
|
||||||
| #Error(Operation.Error.invalidOperationError)
|
| #Error(Operation.Error.t)
|
||||||
| #NoSolution
|
| #NoSolution
|
||||||
]
|
]
|
||||||
|
|
|
@ -37,35 +37,37 @@ module Convolution = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type operationError =
|
||||||
|
| DivisionByZeroError
|
||||||
|
| ComplexNumberError
|
||||||
|
|
||||||
@genType
|
@genType
|
||||||
module Error = {
|
module Error = {
|
||||||
@genType
|
@genType
|
||||||
type invalidOperationError =
|
type t = operationError
|
||||||
| DivisionByZeroError
|
|
||||||
| ComplexNumberError
|
|
||||||
|
|
||||||
let invalidOperationErrorToString = (err: invalidOperationError): string =>
|
let toString = (err: t): string =>
|
||||||
switch err {
|
switch err {
|
||||||
| DivisionByZeroError => "Cannot divide by zero"
|
| DivisionByZeroError => "Cannot divide by zero"
|
||||||
| ComplexNumberError => "Operation returned complex result"
|
| ComplexNumberError => "Operation returned complex result"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let power = (a: float, b: float): result<float, Error.invalidOperationError> =>
|
let power = (a: float, b: float): result<float, Error.t> =>
|
||||||
if a >= 0.0 {
|
if a >= 0.0 {
|
||||||
Ok(a ** b)
|
Ok(a ** b)
|
||||||
} else {
|
} else {
|
||||||
Error(ComplexNumberError)
|
Error(ComplexNumberError)
|
||||||
}
|
}
|
||||||
|
|
||||||
let divide = (a: float, b: float): result<float, Error.invalidOperationError> =>
|
let divide = (a: float, b: float): result<float, Error.t> =>
|
||||||
if b != 0.0 {
|
if b != 0.0 {
|
||||||
Ok(a /. b)
|
Ok(a /. b)
|
||||||
} else {
|
} else {
|
||||||
Error(DivisionByZeroError)
|
Error(DivisionByZeroError)
|
||||||
}
|
}
|
||||||
|
|
||||||
let logarithm = (a: float, b: float): result<float, Error.invalidOperationError> =>
|
let logarithm = (a: float, b: float): result<float, Error.t> =>
|
||||||
if b == 1. {
|
if b == 1. {
|
||||||
Error(DivisionByZeroError)
|
Error(DivisionByZeroError)
|
||||||
} else if b == 0. {
|
} else if b == 0. {
|
||||||
|
@ -80,7 +82,7 @@ let logarithm = (a: float, b: float): result<float, Error.invalidOperationError>
|
||||||
module Algebraic = {
|
module Algebraic = {
|
||||||
@genType
|
@genType
|
||||||
type t = algebraicOperation
|
type t = algebraicOperation
|
||||||
let toFn: (t, float, float) => result<float, Error.invalidOperationError> = (x, a, b) =>
|
let toFn: (t, float, float) => result<float, Error.t> = (x, a, b) =>
|
||||||
switch x {
|
switch x {
|
||||||
| #Add => Ok(a +. b)
|
| #Add => Ok(a +. b)
|
||||||
| #Subtract => Ok(a -. b)
|
| #Subtract => Ok(a -. b)
|
||||||
|
@ -131,7 +133,7 @@ module DistToFloat = {
|
||||||
// Note that different logarithms don't really do anything.
|
// Note that different logarithms don't really do anything.
|
||||||
module Scale = {
|
module Scale = {
|
||||||
type t = scaleOperation
|
type t = scaleOperation
|
||||||
let toFn = (x: t, a: float, b: float): result<float, Error.invalidOperationError> =>
|
let toFn = (x: t, a: float, b: float): result<float, Error.t> =>
|
||||||
switch x {
|
switch x {
|
||||||
| #Multiply => Ok(a *. b)
|
| #Multiply => Ok(a *. b)
|
||||||
| #Divide => divide(a, b)
|
| #Divide => divide(a, b)
|
||||||
|
|
|
@ -234,11 +234,11 @@ module Zipped = {
|
||||||
module PointwiseCombination = {
|
module PointwiseCombination = {
|
||||||
// t1Interpolator and t2Interpolator are functions from XYShape.XtoY, e.g. linearBetweenPointsExtrapolateFlat.
|
// t1Interpolator and t2Interpolator are functions from XYShape.XtoY, e.g. linearBetweenPointsExtrapolateFlat.
|
||||||
let combine: (
|
let combine: (
|
||||||
(float, float) => result<float, Operation.Error.invalidOperationError>,
|
(float, float) => result<float, Operation.Error.t>,
|
||||||
interpolator,
|
interpolator,
|
||||||
T.t,
|
T.t,
|
||||||
T.t,
|
T.t,
|
||||||
) => result<T.t, Operation.Error.invalidOperationError> = %raw(`
|
) => result<T.t, Operation.Error.t> = %raw(`
|
||||||
// This function combines two xyShapes by looping through both of them simultaneously.
|
// This function combines two xyShapes by looping through both of them simultaneously.
|
||||||
// It always moves on to the next smallest x, whether that's in the first or second input's xs,
|
// It always moves on to the next smallest x, whether that's in the first or second input's xs,
|
||||||
// and interpolates the value on the other side, thus accumulating xs and ys.
|
// and interpolates the value on the other side, thus accumulating xs and ys.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user