Merge remote-tracking branch 'origin/develop' into score-dist-on-scalar-resolution

This commit is contained in:
Quinn Dougherty 2022-05-16 12:06:46 -04:00
commit d00b82807c
15 changed files with 632 additions and 105 deletions

View File

@ -31,9 +31,9 @@
"@testing-library/user-event": "^14.2.0", "@testing-library/user-event": "^14.2.0",
"@types/jest": "^27.5.0", "@types/jest": "^27.5.0",
"@types/lodash": "^4.14.182", "@types/lodash": "^4.14.182",
"@types/node": "^17.0.32", "@types/node": "^17.0.33",
"@types/react": "^18.0.9", "@types/react": "^18.0.9",
"@types/react-dom": "^18.0.2", "@types/react-dom": "^18.0.4",
"@types/styled-components": "^5.1.24", "@types/styled-components": "^5.1.24",
"@types/webpack": "^5.28.0", "@types/webpack": "^5.28.0",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",

View File

@ -7,6 +7,8 @@ import {
lambdaValue, lambdaValue,
environment, environment,
runForeign, runForeign,
squiggleExpression,
errorValue,
errorValueToString, errorValueToString,
} from "@quri/squiggle-lang"; } from "@quri/squiggle-lang";
import { createClassFromSpec } from "react-vega"; import { createClassFromSpec } from "react-vega";
@ -45,40 +47,40 @@ interface FunctionChartProps {
environment: environment; environment: environment;
} }
export const FunctionChart: React.FC<FunctionChartProps> = ({ type percentiles = {
fn, x: number;
chartSettings, p1: number;
environment, p5: number;
}: FunctionChartProps) => { p10: number;
let [mouseOverlay, setMouseOverlay] = React.useState(0); p20: number;
function handleHover(_name: string, value: unknown) { p30: number;
setMouseOverlay(value as number); p40: number;
} p50: number;
function handleOut() { p60: number;
setMouseOverlay(NaN); p70: number;
} p80: number;
const signalListeners = { mousemove: handleHover, mouseout: handleOut }; p90: number;
let mouseItem = runForeign(fn, [mouseOverlay], environment); p95: number;
let showChart = p99: number;
mouseItem.tag === "Ok" && mouseItem.value.tag == "distribution" ? ( }[];
<DistributionChart
distribution={mouseItem.value.value} type errors = _.Dictionary<
width={400} {
height={140} x: number;
showSummary={false} value: string;
/> }[]
) : ( >;
<></>
); type point = { x: number; value: result<Distribution, string> };
let data1 = _rangeByCount(
let getPercentiles = ({ chartSettings, fn, environment }) => {
let chartPointsToRender = _rangeByCount(
chartSettings.start, chartSettings.start,
chartSettings.stop, chartSettings.stop,
chartSettings.count chartSettings.count
); );
type point = { x: number; value: result<Distribution, string> };
let valueData: point[] = React.useMemo( let chartPointsData: point[] = chartPointsToRender.map((x) => {
() =>
data1.map((x) => {
let result = runForeign(fn, [x], environment); let result = runForeign(fn, [x], environment);
if (result.tag === "Ok") { if (result.tag === "Ok") {
if (result.value.tag == "distribution") { if (result.value.tag == "distribution") {
@ -99,15 +101,14 @@ export const FunctionChart: React.FC<FunctionChartProps> = ({
value: { tag: "Error", value: errorValueToString(result.value) }, value: { tag: "Error", value: errorValueToString(result.value) },
}; };
} }
}), });
[environment, fn]
);
let initialPartition: [ let initialPartition: [
{ x: number; value: Distribution }[], { x: number; value: Distribution }[],
{ x: number; value: string }[] { x: number; value: string }[]
] = [[], []]; ] = [[], []];
let [functionImage, errors] = valueData.reduce((acc, current) => {
let [functionImage, errors] = chartPointsData.reduce((acc, current) => {
if (current.value.tag === "Ok") { if (current.value.tag === "Ok") {
acc[0].push({ x: current.x, value: current.value.value }); acc[0].push({ x: current.x, value: current.value.value });
} else { } else {
@ -116,35 +117,83 @@ export const FunctionChart: React.FC<FunctionChartProps> = ({
return acc; return acc;
}, initialPartition); }, initialPartition);
let percentiles = functionImage.map(({ x, value }) => { let groupedErrors: errors = _.groupBy(errors, (x) => x.value);
let percentiles: percentiles = functionImage.map(({ x, value }) => {
// We convert it to to a pointSet distribution first, so that in case its a sample set
// distribution, it doesn't internally convert it to a pointSet distribution for every
// single inv() call.
let toPointSet: Distribution = unwrap(value.toPointSet());
return { return {
x: x, x: x,
p1: unwrap(value.inv(0.01)), p1: unwrap(toPointSet.inv(0.01)),
p5: unwrap(value.inv(0.05)), p5: unwrap(toPointSet.inv(0.05)),
p10: unwrap(value.inv(0.12)), p10: unwrap(toPointSet.inv(0.1)),
p20: unwrap(value.inv(0.2)), p20: unwrap(toPointSet.inv(0.2)),
p30: unwrap(value.inv(0.3)), p30: unwrap(toPointSet.inv(0.3)),
p40: unwrap(value.inv(0.4)), p40: unwrap(toPointSet.inv(0.4)),
p50: unwrap(value.inv(0.5)), p50: unwrap(toPointSet.inv(0.5)),
p60: unwrap(value.inv(0.6)), p60: unwrap(toPointSet.inv(0.6)),
p70: unwrap(value.inv(0.7)), p70: unwrap(toPointSet.inv(0.7)),
p80: unwrap(value.inv(0.8)), p80: unwrap(toPointSet.inv(0.8)),
p90: unwrap(value.inv(0.9)), p90: unwrap(toPointSet.inv(0.9)),
p95: unwrap(value.inv(0.95)), p95: unwrap(toPointSet.inv(0.95)),
p99: unwrap(value.inv(0.99)), p99: unwrap(toPointSet.inv(0.99)),
}; };
}); });
let groupedErrors = _.groupBy(errors, (x) => x.value); return { percentiles, errors: groupedErrors };
};
export const FunctionChart: React.FC<FunctionChartProps> = ({
fn,
chartSettings,
environment,
}: FunctionChartProps) => {
let [mouseOverlay, setMouseOverlay] = React.useState(0);
function handleHover(_name: string, value: unknown) {
setMouseOverlay(value as number);
}
function handleOut() {
setMouseOverlay(NaN);
}
const signalListeners = { mousemove: handleHover, mouseout: handleOut };
let mouseItem: result<squiggleExpression, errorValue> = !!mouseOverlay
? runForeign(fn, [mouseOverlay], environment)
: {
tag: "Error",
value: {
tag: "REExpectedType",
value: "Hover x-coordinate returned NaN. Expected a number.",
},
};
let showChart =
mouseItem.tag === "Ok" && mouseItem.value.tag == "distribution" ? (
<DistributionChart
distribution={mouseItem.value.value}
width={400}
height={140}
showSummary={false}
/>
) : (
<></>
);
let getPercentilesMemoized = React.useMemo(
() => getPercentiles({ chartSettings, fn, environment }),
[environment, fn]
);
return ( return (
<> <>
<SquigglePercentilesChart <SquigglePercentilesChart
data={{ facet: percentiles }} data={{ facet: getPercentilesMemoized.percentiles }}
actions={false} actions={false}
signalListeners={signalListeners} signalListeners={signalListeners}
/> />
{showChart} {showChart}
{_.entries(groupedErrors).map(([errorName, errorPoints]) => ( {_.entries(getPercentilesMemoized.errors).map(
([errorName, errorPoints]) => (
<ErrorBox key={errorName} heading={errorName}> <ErrorBox key={errorName} heading={errorName}>
Values:{" "} Values:{" "}
{errorPoints {errorPoints
@ -155,7 +204,8 @@ export const FunctionChart: React.FC<FunctionChartProps> = ({
</> </>
))} ))}
</ErrorBox> </ErrorBox>
))} )
)}
</> </>
); );
}; };

View File

@ -194,7 +194,10 @@ const SquiggleItem: React.FC<SquiggleItemProps> = ({
<FunctionChart <FunctionChart
fn={expression.value} fn={expression.value}
chartSettings={chartSettings} chartSettings={chartSettings}
environment={environment} environment={{
sampleCount: environment.sampleCount / 10,
xyPointLength: environment.xyPointLength / 10,
}}
/> />
); );
} }
@ -232,7 +235,8 @@ const ChartWrapper = styled.div`
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
`; `;
let defaultChartSettings = { start: 0, stop: 10, count: 100 }; let defaultChartSettings = { start: 0, stop: 10, count: 20 };
export const SquiggleChart: React.FC<SquiggleChartProps> = ({ export const SquiggleChart: React.FC<SquiggleChartProps> = ({
squiggleString = "", squiggleString = "",
environment, environment,

View File

@ -56,7 +56,7 @@ export let SquiggleEditor: React.FC<SquiggleEditorProps> = ({
environment, environment,
diagramStart = 0, diagramStart = 0,
diagramStop = 10, diagramStop = 10,
diagramCount = 100, diagramCount = 20,
onChange, onChange,
bindings = defaultBindings, bindings = defaultBindings,
jsImports = defaultImports, jsImports = defaultImports,

View File

@ -153,6 +153,20 @@ to allow large and small numbers being printed cleanly.
</Story> </Story>
</Canvas> </Canvas>
## Functions
<Canvas>
<Story
name="Function"
args={{
squiggleString: "foo(t) = normal(t,2)*normal(5,3); foo",
width,
}}
>
{Template.bind({})}
</Story>
</Canvas>
## Records ## Records
<Canvas> <Canvas>

View File

@ -31,6 +31,9 @@ describe("eval on distribution functions", () => {
testEval("mean(normal(5,2))", "Ok(5)") testEval("mean(normal(5,2))", "Ok(5)")
testEval("mean(lognormal(1,2))", "Ok(20.085536923187668)") testEval("mean(lognormal(1,2))", "Ok(20.085536923187668)")
testEval("mean(gamma(5,5))", "Ok(25)") testEval("mean(gamma(5,5))", "Ok(25)")
testEval("mean(bernoulli(0.2))", "Ok(0.2)")
testEval("mean(bernoulli(0.8))", "Ok(0.8)")
testEval("mean(logistic(5,1))", "Ok(5)")
}) })
describe("toString", () => { describe("toString", () => {
testEval("toString(normal(5,2))", "Ok('Normal(5,2)')") testEval("toString(normal(5,2))", "Ok('Normal(5,2)')")

View File

@ -33,29 +33,29 @@
"Rescript" "Rescript"
], ],
"author": "Quantified Uncertainty Research Institute", "author": "Quantified Uncertainty Research Institute",
"license": "MIT",
"dependencies": { "dependencies": {
"rescript": "^9.1.4", "@stdlib/stats": "^0.0.13",
"jstat": "^1.9.5", "jstat": "^1.9.5",
"mathjs": "^10.5.2",
"pdfast": "^0.2.0", "pdfast": "^0.2.0",
"mathjs": "^10.5.2" "rescript": "^9.1.4"
}, },
"devDependencies": { "devDependencies": {
"bisect_ppx": "^2.7.1",
"lodash": "^4.17.21",
"rescript-fast-check": "^1.1.1",
"@glennsl/rescript-jest": "^0.9.0", "@glennsl/rescript-jest": "^0.9.0",
"@istanbuljs/nyc-config-typescript": "^1.0.2", "@istanbuljs/nyc-config-typescript": "^1.0.2",
"@types/jest": "^27.5.0", "@types/jest": "^27.5.0",
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
"bisect_ppx": "^2.7.1",
"chalk": "^5.0.1", "chalk": "^5.0.1",
"codecov": "^3.8.3", "codecov": "^3.8.3",
"fast-check": "^2.25.0", "fast-check": "^2.25.0",
"gentype": "^4.3.0", "gentype": "^4.3.0",
"jest": "^27.5.1", "jest": "^27.5.1",
"lodash": "^4.17.21",
"moduleserve": "^0.9.1", "moduleserve": "^0.9.1",
"nyc": "^15.1.0", "nyc": "^15.1.0",
"reanalyze": "^2.19.0", "reanalyze": "^2.19.0",
"rescript-fast-check": "^1.1.1",
"ts-jest": "^27.1.4", "ts-jest": "^27.1.4",
"ts-loader": "^9.3.0", "ts-loader": "^9.3.0",
"ts-node": "^10.7.0", "ts-node": "^10.7.0",

View File

@ -18,6 +18,7 @@ type outputType =
| Dist(genericDist) | Dist(genericDist)
| Float(float) | Float(float)
| String(string) | String(string)
| FloatArray(array<float>)
| Bool(bool) | Bool(bool)
| GenDistError(error) | GenDistError(error)

View File

@ -14,6 +14,7 @@ type outputType =
| Dist(genericDist) | Dist(genericDist)
| Float(float) | Float(float)
| String(string) | String(string)
| FloatArray(array<float>)
| Bool(bool) | Bool(bool)
| GenDistError(error) | GenDistError(error)

View File

@ -216,6 +216,50 @@ module Uniform = {
} }
} }
module Logistic = {
type t = logistic
let make = (location, scale) =>
scale > 0.0
? Ok(#Logistic({location: location, scale: scale}))
: Error("Scale must be positive")
let pdf = (x, t: t) => Stdlib.Logistic.pdf(x, t.location, t.scale)
let cdf = (x, t: t) => Stdlib.Logistic.cdf(x, t.location, t.scale)
let inv = (p, t: t) => Stdlib.Logistic.quantile(p, t.location, t.scale)
let sample = (t: t) => {
let s = Uniform.sample({low: 0.0, high: 1.0})
inv(s, t)
}
let mean = (t: t) => Ok(Stdlib.Logistic.mean(t.location, t.scale))
let toString = ({location, scale}: t) => j`Logistic($location,$scale)`
}
module Bernoulli = {
type t = bernoulli
let make = p =>
p >= 0.0 && p <= 1.0
? Ok(#Bernoulli({p: p}))
: Error("Bernoulli parameter must be between 0 and 1")
let pmf = (x, t: t) => Stdlib.Bernoulli.pmf(x, t.p)
//Bernoulli is a discrete distribution, so it doesn't really have a pdf().
//We fake this for now with the pmf function, but this should be fixed at some point.
let pdf = (x, t: t) => Stdlib.Bernoulli.pmf(x, t.p)
let cdf = (x, t: t) => Stdlib.Bernoulli.cdf(x, t.p)
let inv = (p, t: t) => Stdlib.Bernoulli.quantile(p, t.p)
let mean = (t: t) => Ok(Stdlib.Bernoulli.mean(t.p))
let min = (t: t) => t.p == 1.0 ? 1.0 : 0.0
let max = (t: t) => t.p == 0.0 ? 0.0 : 1.0
let sample = (t: t) => {
let s = Uniform.sample({low: 0.0, high: 1.0})
inv(s, t)
}
let toString = ({p}: t) => j`Bernoulli($p)`
let toPointSetDist = ({p}: t): PointSetTypes.pointSetDist => Discrete(
Discrete.make(~integralSumCache=Some(1.0), {xs: [0.0, 1.0], ys: [1.0 -. p, p]}),
)
}
module Gamma = { module Gamma = {
type t = gamma type t = gamma
let make = (shape: float, scale: float) => { let make = (shape: float, scale: float) => {
@ -252,6 +296,9 @@ module Float = {
let mean = (t: t) => Ok(t) let mean = (t: t) => Ok(t)
let sample = (t: t) => t let sample = (t: t) => t
let toString = (t: t) => j`Delta($t)` let toString = (t: t) => j`Delta($t)`
let toPointSetDist = (t: t): PointSetTypes.pointSetDist => Discrete(
Discrete.make(~integralSumCache=Some(1.0), {xs: [t], ys: [1.0]}),
)
} }
module From90thPercentile = { module From90thPercentile = {
@ -275,9 +322,11 @@ module T = {
| #Cauchy(n) => Cauchy.pdf(x, n) | #Cauchy(n) => Cauchy.pdf(x, n)
| #Gamma(n) => Gamma.pdf(x, n) | #Gamma(n) => Gamma.pdf(x, n)
| #Lognormal(n) => Lognormal.pdf(x, n) | #Lognormal(n) => Lognormal.pdf(x, n)
| #Logistic(n) => Logistic.pdf(x, n)
| #Uniform(n) => Uniform.pdf(x, n) | #Uniform(n) => Uniform.pdf(x, n)
| #Beta(n) => Beta.pdf(x, n) | #Beta(n) => Beta.pdf(x, n)
| #Float(n) => Float.pdf(x, n) | #Float(n) => Float.pdf(x, n)
| #Bernoulli(n) => Bernoulli.pdf(x, n)
} }
let cdf = (x, dist) => let cdf = (x, dist) =>
@ -287,10 +336,12 @@ module T = {
| #Exponential(n) => Exponential.cdf(x, n) | #Exponential(n) => Exponential.cdf(x, n)
| #Cauchy(n) => Cauchy.cdf(x, n) | #Cauchy(n) => Cauchy.cdf(x, n)
| #Gamma(n) => Gamma.cdf(x, n) | #Gamma(n) => Gamma.cdf(x, n)
| #Logistic(n) => Logistic.cdf(x, n)
| #Lognormal(n) => Lognormal.cdf(x, n) | #Lognormal(n) => Lognormal.cdf(x, n)
| #Uniform(n) => Uniform.cdf(x, n) | #Uniform(n) => Uniform.cdf(x, n)
| #Beta(n) => Beta.cdf(x, n) | #Beta(n) => Beta.cdf(x, n)
| #Float(n) => Float.cdf(x, n) | #Float(n) => Float.cdf(x, n)
| #Bernoulli(n) => Bernoulli.cdf(x, n)
} }
let inv = (x, dist) => let inv = (x, dist) =>
@ -300,10 +351,12 @@ module T = {
| #Exponential(n) => Exponential.inv(x, n) | #Exponential(n) => Exponential.inv(x, n)
| #Cauchy(n) => Cauchy.inv(x, n) | #Cauchy(n) => Cauchy.inv(x, n)
| #Gamma(n) => Gamma.inv(x, n) | #Gamma(n) => Gamma.inv(x, n)
| #Logistic(n) => Logistic.inv(x, n)
| #Lognormal(n) => Lognormal.inv(x, n) | #Lognormal(n) => Lognormal.inv(x, n)
| #Uniform(n) => Uniform.inv(x, n) | #Uniform(n) => Uniform.inv(x, n)
| #Beta(n) => Beta.inv(x, n) | #Beta(n) => Beta.inv(x, n)
| #Float(n) => Float.inv(x, n) | #Float(n) => Float.inv(x, n)
| #Bernoulli(n) => Bernoulli.inv(x, n)
} }
let sample: symbolicDist => float = x => let sample: symbolicDist => float = x =>
@ -313,10 +366,12 @@ module T = {
| #Exponential(n) => Exponential.sample(n) | #Exponential(n) => Exponential.sample(n)
| #Cauchy(n) => Cauchy.sample(n) | #Cauchy(n) => Cauchy.sample(n)
| #Gamma(n) => Gamma.sample(n) | #Gamma(n) => Gamma.sample(n)
| #Logistic(n) => Logistic.sample(n)
| #Lognormal(n) => Lognormal.sample(n) | #Lognormal(n) => Lognormal.sample(n)
| #Uniform(n) => Uniform.sample(n) | #Uniform(n) => Uniform.sample(n)
| #Beta(n) => Beta.sample(n) | #Beta(n) => Beta.sample(n)
| #Float(n) => Float.sample(n) | #Float(n) => Float.sample(n)
| #Bernoulli(n) => Bernoulli.sample(n)
} }
let doN = (n, fn) => { let doN = (n, fn) => {
@ -336,10 +391,12 @@ module T = {
| #Cauchy(n) => Cauchy.toString(n) | #Cauchy(n) => Cauchy.toString(n)
| #Normal(n) => Normal.toString(n) | #Normal(n) => Normal.toString(n)
| #Gamma(n) => Gamma.toString(n) | #Gamma(n) => Gamma.toString(n)
| #Logistic(n) => Logistic.toString(n)
| #Lognormal(n) => Lognormal.toString(n) | #Lognormal(n) => Lognormal.toString(n)
| #Uniform(n) => Uniform.toString(n) | #Uniform(n) => Uniform.toString(n)
| #Beta(n) => Beta.toString(n) | #Beta(n) => Beta.toString(n)
| #Float(n) => Float.toString(n) | #Float(n) => Float.toString(n)
| #Bernoulli(n) => Bernoulli.toString(n)
} }
let min: symbolicDist => float = x => let min: symbolicDist => float = x =>
@ -349,8 +406,10 @@ module T = {
| #Cauchy(n) => Cauchy.inv(minCdfValue, n) | #Cauchy(n) => Cauchy.inv(minCdfValue, n)
| #Normal(n) => Normal.inv(minCdfValue, n) | #Normal(n) => Normal.inv(minCdfValue, n)
| #Lognormal(n) => Lognormal.inv(minCdfValue, n) | #Lognormal(n) => Lognormal.inv(minCdfValue, n)
| #Logistic(n) => Logistic.inv(minCdfValue, n)
| #Gamma(n) => Gamma.inv(minCdfValue, n) | #Gamma(n) => Gamma.inv(minCdfValue, n)
| #Uniform({low}) => low | #Uniform({low}) => low
| #Bernoulli(n) => Bernoulli.min(n)
| #Beta(n) => Beta.inv(minCdfValue, n) | #Beta(n) => Beta.inv(minCdfValue, n)
| #Float(n) => n | #Float(n) => n
} }
@ -363,7 +422,9 @@ module T = {
| #Normal(n) => Normal.inv(maxCdfValue, n) | #Normal(n) => Normal.inv(maxCdfValue, n)
| #Gamma(n) => Gamma.inv(maxCdfValue, n) | #Gamma(n) => Gamma.inv(maxCdfValue, n)
| #Lognormal(n) => Lognormal.inv(maxCdfValue, n) | #Lognormal(n) => Lognormal.inv(maxCdfValue, n)
| #Logistic(n) => Logistic.inv(maxCdfValue, n)
| #Beta(n) => Beta.inv(maxCdfValue, n) | #Beta(n) => Beta.inv(maxCdfValue, n)
| #Bernoulli(n) => Bernoulli.max(n)
| #Uniform({high}) => high | #Uniform({high}) => high
| #Float(n) => n | #Float(n) => n
} }
@ -376,8 +437,10 @@ module T = {
| #Normal(n) => Normal.mean(n) | #Normal(n) => Normal.mean(n)
| #Lognormal(n) => Lognormal.mean(n) | #Lognormal(n) => Lognormal.mean(n)
| #Beta(n) => Beta.mean(n) | #Beta(n) => Beta.mean(n)
| #Logistic(n) => Logistic.mean(n)
| #Uniform(n) => Uniform.mean(n) | #Uniform(n) => Uniform.mean(n)
| #Gamma(n) => Gamma.mean(n) | #Gamma(n) => Gamma.mean(n)
| #Bernoulli(n) => Bernoulli.mean(n)
| #Float(n) => Float.mean(n) | #Float(n) => Float.mean(n)
} }
@ -453,7 +516,8 @@ module T = {
d: symbolicDist, d: symbolicDist,
): PointSetTypes.pointSetDist => ): PointSetTypes.pointSetDist =>
switch d { switch d {
| #Float(v) => Discrete(Discrete.make(~integralSumCache=Some(1.0), {xs: [v], ys: [1.0]})) | #Float(v) => Float.toPointSetDist(v)
| #Bernoulli(v) => Bernoulli.toPointSetDist(v)
| _ => | _ =>
let xs = interpolateXs(~xSelection, d, sampleCount) let xs = interpolateXs(~xSelection, d, sampleCount)
let ys = xs |> E.A.fmap(x => pdf(x, d)) let ys = xs |> E.A.fmap(x => pdf(x, d))

View File

@ -36,6 +36,13 @@ type gamma = {
scale: float, scale: float,
} }
type logistic = {
location: float,
scale: float,
}
type bernoulli = {p: float}
@genType @genType
type symbolicDist = [ type symbolicDist = [
| #Normal(normal) | #Normal(normal)
@ -47,6 +54,8 @@ type symbolicDist = [
| #Triangular(triangular) | #Triangular(triangular)
| #Gamma(gamma) | #Gamma(gamma)
| #Float(float) | #Float(float)
| #Bernoulli(bernoulli)
| #Logistic(logistic)
] ]
type analyticalSimplificationResult = [ type analyticalSimplificationResult = [

View File

@ -186,6 +186,7 @@ module SymbolicConstructors = {
let oneFloat = name => let oneFloat = name =>
switch name { switch name {
| "exponential" => Ok(SymbolicDist.Exponential.make) | "exponential" => Ok(SymbolicDist.Exponential.make)
| "bernoulli" => Ok(SymbolicDist.Bernoulli.make)
| _ => Error("Unreachable state") | _ => Error("Unreachable state")
} }
@ -195,6 +196,7 @@ module SymbolicConstructors = {
| "uniform" => Ok(SymbolicDist.Uniform.make) | "uniform" => Ok(SymbolicDist.Uniform.make)
| "beta" => Ok(SymbolicDist.Beta.make) | "beta" => Ok(SymbolicDist.Beta.make)
| "lognormal" => Ok(SymbolicDist.Lognormal.make) | "lognormal" => Ok(SymbolicDist.Lognormal.make)
| "logistic" => Ok(SymbolicDist.Logistic.make)
| "cauchy" => Ok(SymbolicDist.Cauchy.make) | "cauchy" => Ok(SymbolicDist.Cauchy.make)
| "gamma" => Ok(SymbolicDist.Gamma.make) | "gamma" => Ok(SymbolicDist.Gamma.make)
| "to" => Ok(SymbolicDist.From90thPercentile.make) | "to" => Ok(SymbolicDist.From90thPercentile.make)
@ -222,14 +224,21 @@ let dispatchToGenericOutput = (
): option<DistributionOperation.outputType> => { ): option<DistributionOperation.outputType> => {
let (fnName, args) = call let (fnName, args) = call
switch (fnName, args) { switch (fnName, args) {
| ("exponential" as fnName, [EvNumber(f)]) => | (("exponential" | "bernoulli") as fnName, [EvNumber(f)]) =>
SymbolicConstructors.oneFloat(fnName) SymbolicConstructors.oneFloat(fnName)
->E.R.bind(r => r(f)) ->E.R.bind(r => r(f))
->SymbolicConstructors.symbolicResultToOutput ->SymbolicConstructors.symbolicResultToOutput
| ("delta", [EvNumber(f)]) => | ("delta", [EvNumber(f)]) =>
SymbolicDist.Float.makeSafe(f)->SymbolicConstructors.symbolicResultToOutput SymbolicDist.Float.makeSafe(f)->SymbolicConstructors.symbolicResultToOutput
| ( | (
("normal" | "uniform" | "beta" | "lognormal" | "cauchy" | "gamma" | "to") as fnName, ("normal"
| "uniform"
| "beta"
| "lognormal"
| "cauchy"
| "gamma"
| "to"
| "logistic") as fnName,
[EvNumber(f1), EvNumber(f2)], [EvNumber(f1), EvNumber(f2)],
) => ) =>
SymbolicConstructors.twoFloat(fnName) SymbolicConstructors.twoFloat(fnName)
@ -240,6 +249,8 @@ let dispatchToGenericOutput = (
->E.R.bind(r => r(f1, f2, f3)) ->E.R.bind(r => r(f1, f2, f3))
->SymbolicConstructors.symbolicResultToOutput ->SymbolicConstructors.symbolicResultToOutput
| ("sample", [EvDistribution(dist)]) => Helpers.toFloatFn(#Sample, dist, ~env) | ("sample", [EvDistribution(dist)]) => Helpers.toFloatFn(#Sample, dist, ~env)
| ("sampleN", [EvDistribution(dist), EvNumber(n)]) =>
Some(FloatArray(GenericDist.sampleN(dist, Belt.Int.fromFloat(n))))
| ("mean", [EvDistribution(dist)]) => Helpers.toFloatFn(#Mean, dist, ~env) | ("mean", [EvDistribution(dist)]) => Helpers.toFloatFn(#Mean, dist, ~env)
| ("integralSum", [EvDistribution(dist)]) => Helpers.toFloatFn(#IntegralSum, dist, ~env) | ("integralSum", [EvDistribution(dist)]) => Helpers.toFloatFn(#IntegralSum, dist, ~env)
| ("toString", [EvDistribution(dist)]) => Helpers.toStringFn(ToString, dist, ~env) | ("toString", [EvDistribution(dist)]) => Helpers.toStringFn(ToString, dist, ~env)
@ -373,6 +384,7 @@ let genericOutputToReducerValue = (o: DistributionOperation.outputType): result<
| Float(d) => Ok(EvNumber(d)) | Float(d) => Ok(EvNumber(d))
| String(d) => Ok(EvString(d)) | String(d) => Ok(EvString(d))
| Bool(d) => Ok(EvBool(d)) | Bool(d) => Ok(EvBool(d))
| FloatArray(d) => Ok(EvArray(d |> E.A.fmap(r => ReducerInterface_ExpressionValue.EvNumber(r))))
| GenDistError(err) => Error(REDistributionError(err)) | GenDistError(err) => Error(REDistributionError(err))
} }

View File

@ -0,0 +1,40 @@
module Bernoulli = {
@module external cdf: (float, float) => float = "@stdlib/stats/base/dists/bernoulli/cdf"
let cdf = cdf
@module external pmf: (float, float) => float = "@stdlib/stats/base/dists/bernoulli/pmf"
let pmf = pmf
@module external quantile: (float, float) => float = "@stdlib/stats/base/dists/bernoulli/quantile"
let quantile = quantile
@module external mean: float => float = "@stdlib/stats/base/dists/bernoulli/mean"
let mean = mean
@module external stdev: float => float = "@stdlib/stats/base/dists/bernoulli/stdev"
let stdev = stdev
@module external variance: float => float = "@stdlib/stats/base/dists/bernoulli/variance"
let variance = variance
}
module Logistic = {
@module external cdf: (float, float, float) => float = "@stdlib/stats/base/dists/logistic/cdf"
let cdf = cdf
@module external pdf: (float, float, float) => float = "@stdlib/stats/base/dists/logistic/pdf"
let pdf = pdf
@module
external quantile: (float, float, float) => float = "@stdlib/stats/base/dists/logistic/quantile"
let quantile = quantile
@module external mean: (float, float) => float = "@stdlib/stats/base/dists/logistic/mean"
let mean = mean
@module external stdev: (float, float) => float = "@stdlib/stats/base/dists/logistic/stdev"
let stdev = stdev
@module external variance: (float, float) => float = "@stdlib/stats/base/dists/logistic/variance"
let variance = variance
}

View File

@ -16,7 +16,7 @@
"@docusaurus/preset-classic": "2.0.0-beta.20", "@docusaurus/preset-classic": "2.0.0-beta.20",
"@quri/squiggle-components": "^0.2.20", "@quri/squiggle-components": "^0.2.20",
"clsx": "^1.1.1", "clsx": "^1.1.1",
"prism-react-renderer": "^1.2.1", "prism-react-renderer": "^1.3.3",
"react": "^18.1.0", "react": "^18.1.0",
"react-dom": "^18.1.0", "react-dom": "^18.1.0",
"remark-math": "^3", "remark-math": "^3",

355
yarn.lock
View File

@ -2502,6 +2502,335 @@
eval "^0.1.8" eval "^0.1.8"
webpack-sources "^1.4.3" webpack-sources "^1.4.3"
"@stdlib/array@^0.0.x":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@stdlib/array/-/array-0.0.12.tgz#12f40ab95bb36d424cdad991f29fc3cb491ee29e"
integrity sha512-nDksiuvRC1dSTHrf5yOGQmlRwAzSKV8MdFQwFSvLbZGGhi5Y4hExqea5HloLgNVouVs8lnAFi2oubSM4Mc7YAg==
dependencies:
"@stdlib/assert" "^0.0.x"
"@stdlib/blas" "^0.0.x"
"@stdlib/complex" "^0.0.x"
"@stdlib/constants" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/symbol" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/assert@^0.0.x":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@stdlib/assert/-/assert-0.0.12.tgz#1648c9016e5041291f55a6464abcc4069c5103ce"
integrity sha512-38FxFf+ZoQZbdc+m09UsWtaCmzd/2e7im0JOaaFYE7icmRfm+4KiE9BRvBT4tIn7ioLB2f9PsBicKjIsf+tY1w==
dependencies:
"@stdlib/array" "^0.0.x"
"@stdlib/cli" "^0.0.x"
"@stdlib/complex" "^0.0.x"
"@stdlib/constants" "^0.0.x"
"@stdlib/fs" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/ndarray" "^0.0.x"
"@stdlib/number" "^0.0.x"
"@stdlib/os" "^0.0.x"
"@stdlib/process" "^0.0.x"
"@stdlib/regexp" "^0.0.x"
"@stdlib/streams" "^0.0.x"
"@stdlib/string" "^0.0.x"
"@stdlib/symbol" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/bigint@^0.0.x":
version "0.0.11"
resolved "https://registry.yarnpkg.com/@stdlib/bigint/-/bigint-0.0.11.tgz#c416a1d727001c55f4897e6424124199d638f2fd"
integrity sha512-uz0aYDLABAYyqxaCSHYbUt0yPkXYUCR7TrVvHN+UUD3i8FZ02ZKcLO+faKisDyxKEoSFTNtn3Ro8Ir5ebOlVXQ==
dependencies:
"@stdlib/utils" "^0.0.x"
"@stdlib/blas@^0.0.x":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@stdlib/blas/-/blas-0.0.12.tgz#7e93e42b4621fc6903bf63264f045047333536c2"
integrity sha512-nWY749bWceuoWQ7gz977blCwR7lyQ/rsIXVO4b600h+NFpeA2i/ea7MYC680utIbeu2cnDWHdglBPoK535VAzA==
dependencies:
"@stdlib/array" "^0.0.x"
"@stdlib/assert" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/number" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/buffer@^0.0.x":
version "0.0.11"
resolved "https://registry.yarnpkg.com/@stdlib/buffer/-/buffer-0.0.11.tgz#6137b00845e6c905181cc7ebfae9f7e47c01b0ce"
integrity sha512-Jeie5eDDa1tVuRcuU+cBXI/oOXSmMxUUccZpqXzgYe0IO8QSNtNxv9mUTzJk/m5wH+lmLoDvNxzPpOH9TODjJg==
dependencies:
"@stdlib/array" "^0.0.x"
"@stdlib/assert" "^0.0.x"
"@stdlib/process" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/cli@^0.0.x":
version "0.0.10"
resolved "https://registry.yarnpkg.com/@stdlib/cli/-/cli-0.0.10.tgz#28e2fbe6865d7f5cd15b7dc5846c99bd3b91674f"
integrity sha512-OITGaxG46kwK799+NuOd/+ccosJ9koVuQBC610DDJv0ZJf8mD7sbjGXrmue9C4EOh8MP7Vm/6HN14BojX8oTCg==
dependencies:
"@stdlib/utils" "^0.0.x"
minimist "^1.2.0"
"@stdlib/complex@^0.0.x":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@stdlib/complex/-/complex-0.0.12.tgz#3afbc190cd0a9b37fc7c6e508c3aa9fda9106944"
integrity sha512-UbZBdaUxT2G+lsTIrVlRZwx2IRY6GXnVILggeejsIVxHSuK+oTyapfetcAv0FJFLP+Rrr+ZzrN4b9G3hBw6NHA==
dependencies:
"@stdlib/array" "^0.0.x"
"@stdlib/assert" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/constants@^0.0.x":
version "0.0.11"
resolved "https://registry.yarnpkg.com/@stdlib/constants/-/constants-0.0.11.tgz#78cd56d6c2982b30264843c3d75bde7125e90cd2"
integrity sha512-cWKy0L9hXHUQTvFzdPkTvZnn/5Pjv7H4UwY0WC1rLt+A5CxFDJKjvnIi9ypSzJS3CAiGl1ZaHCdadoqXhNdkUg==
dependencies:
"@stdlib/array" "^0.0.x"
"@stdlib/assert" "^0.0.x"
"@stdlib/number" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/fs@^0.0.x":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@stdlib/fs/-/fs-0.0.12.tgz#662365fd5846a51f075724b4f2888ae88441b70d"
integrity sha512-zcDLbt39EEM3M3wJW6luChS53B8T+TMJkjs2526UpKJ71O0/0adR57cI7PfCpkMd33d05uM7GM+leEj4eks4Cw==
dependencies:
"@stdlib/array" "^0.0.x"
"@stdlib/assert" "^0.0.x"
"@stdlib/cli" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/process" "^0.0.x"
"@stdlib/string" "^0.0.x"
"@stdlib/utils" "^0.0.x"
debug "^2.6.9"
"@stdlib/math@^0.0.x":
version "0.0.11"
resolved "https://registry.yarnpkg.com/@stdlib/math/-/math-0.0.11.tgz#eb6638bc03a20fbd6727dd5b977ee0170bda4649"
integrity sha512-qI78sR1QqGjHj8k/aAqkZ51Su2fyBvaR/jMKQqcB/ML8bpYpf+QGlGvTty5Qdru/wpqds4kVFOVbWGcNFIV2+Q==
dependencies:
"@stdlib/assert" "^0.0.x"
"@stdlib/constants" "^0.0.x"
"@stdlib/ndarray" "^0.0.x"
"@stdlib/number" "^0.0.x"
"@stdlib/strided" "^0.0.x"
"@stdlib/symbol" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
debug "^2.6.9"
"@stdlib/ndarray@^0.0.x":
version "0.0.13"
resolved "https://registry.yarnpkg.com/@stdlib/ndarray/-/ndarray-0.0.13.tgz#2e8fc645e10f56a645a0ab81598808c0e8f43b82"
integrity sha512-Z+U9KJP4U2HWrLtuAXSPvhNetAdqaNLMcliR6S/fz+VPlFDeymRK7omRFMgVQ+1zcAvIgKZGJxpLC3vjiPUYEw==
dependencies:
"@stdlib/array" "^0.0.x"
"@stdlib/assert" "^0.0.x"
"@stdlib/bigint" "^0.0.x"
"@stdlib/buffer" "^0.0.x"
"@stdlib/complex" "^0.0.x"
"@stdlib/constants" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/number" "^0.0.x"
"@stdlib/string" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/nlp@^0.0.x":
version "0.0.11"
resolved "https://registry.yarnpkg.com/@stdlib/nlp/-/nlp-0.0.11.tgz#532ec0f7267b8d639e4c20c6de864e8de8a09054"
integrity sha512-D9avYWANm0Db2W7RpzdSdi5GxRYALGAqUrNnRnnKIO6sMEfr/DvONoAbWruda4QyvSC+0MJNwcEn7+PHhRwYhw==
dependencies:
"@stdlib/array" "^0.0.x"
"@stdlib/assert" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/random" "^0.0.x"
"@stdlib/string" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/number@^0.0.x":
version "0.0.10"
resolved "https://registry.yarnpkg.com/@stdlib/number/-/number-0.0.10.tgz#4030ad8fc3fac19a9afb415c443cee6deea0e65c"
integrity sha512-RyfoP9MlnX4kccvg8qv7vYQPbLdzfS1Mnp/prGOoWhvMG3pyBwFAan34kwFb5IS/zHC3W5EmrgXCV2QWyLg/Kg==
dependencies:
"@stdlib/array" "^0.0.x"
"@stdlib/assert" "^0.0.x"
"@stdlib/constants" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/os" "^0.0.x"
"@stdlib/string" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/os@^0.0.x":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@stdlib/os/-/os-0.0.12.tgz#08bbf013c62a7153099fa9cbac086ca1349a4677"
integrity sha512-O7lklZ/9XEzoCmYvzjPh7jrFWkbpOSHGI71ve3dkSvBy5tyiSL3TtivfKsIC+9ZxuEJZ3d3lIjc9e+yz4HVbqQ==
dependencies:
"@stdlib/assert" "^0.0.x"
"@stdlib/cli" "^0.0.x"
"@stdlib/fs" "^0.0.x"
"@stdlib/process" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/process@^0.0.x":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@stdlib/process/-/process-0.0.12.tgz#123325079d89a32f4212f72fb694f8fe3614cf18"
integrity sha512-P0X0TMvkissBE1Wr877Avi2/AxmP7X5Toa6GatHbpJdDg6jQmN4SgPd+NZNp98YtZUyk478c8XSIzMr1krQ20g==
dependencies:
"@stdlib/assert" "^0.0.x"
"@stdlib/buffer" "^0.0.x"
"@stdlib/cli" "^0.0.x"
"@stdlib/fs" "^0.0.x"
"@stdlib/streams" "^0.0.x"
"@stdlib/string" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/random@^0.0.x":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@stdlib/random/-/random-0.0.12.tgz#e819c3abd602ed5559ba800dba751e49c633ff85"
integrity sha512-c5yND4Ahnm9Jx0I+jsKhn4Yrz10D53ALSrIe3PG1qIz3kNFcIPnmvCuNGd+3V4ch4Mbrez55Y8z/ZC5RJh4vJQ==
dependencies:
"@stdlib/array" "^0.0.x"
"@stdlib/assert" "^0.0.x"
"@stdlib/blas" "^0.0.x"
"@stdlib/buffer" "^0.0.x"
"@stdlib/cli" "^0.0.x"
"@stdlib/constants" "^0.0.x"
"@stdlib/fs" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/process" "^0.0.x"
"@stdlib/stats" "^0.0.x"
"@stdlib/streams" "^0.0.x"
"@stdlib/symbol" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
debug "^2.6.9"
readable-stream "^2.1.4"
"@stdlib/regexp@^0.0.x":
version "0.0.13"
resolved "https://registry.yarnpkg.com/@stdlib/regexp/-/regexp-0.0.13.tgz#80b98361dc7a441b47bc3fa964bb0c826759e971"
integrity sha512-3JT5ZIoq/1nXY+dY+QtkU8/m7oWDeekyItEEXMx9c/AOf0ph8fmvTUGMDNfUq0RetcznFe3b66kFz6Zt4XHviA==
dependencies:
"@stdlib/assert" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/stats@^0.0.13", "@stdlib/stats@^0.0.x":
version "0.0.13"
resolved "https://registry.yarnpkg.com/@stdlib/stats/-/stats-0.0.13.tgz#87c973f385379d794707c7b5196a173dba8b07e1"
integrity sha512-hm+t32dKbx/L7+7WlQ1o4NDEzV0J4QSnwFBCsIMIAO8+VPxTZ4FxyNERl4oKlS3hZZe4AVKjoOVhBDtgEWrS4g==
dependencies:
"@stdlib/array" "^0.0.x"
"@stdlib/assert" "^0.0.x"
"@stdlib/blas" "^0.0.x"
"@stdlib/constants" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/ndarray" "^0.0.x"
"@stdlib/random" "^0.0.x"
"@stdlib/string" "^0.0.x"
"@stdlib/symbol" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/streams@^0.0.x":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@stdlib/streams/-/streams-0.0.12.tgz#07f5ceae5852590afad8e1cb7ce94174becc8739"
integrity sha512-YLUlXwjJNknHp92IkJUdvn5jEQjDckpawKhDLLCoxyh3h5V+w/8+61SH7TMTfKx5lBxKJ8vvtchZh90mIJOAjQ==
dependencies:
"@stdlib/assert" "^0.0.x"
"@stdlib/buffer" "^0.0.x"
"@stdlib/cli" "^0.0.x"
"@stdlib/fs" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
debug "^2.6.9"
readable-stream "^2.1.4"
"@stdlib/strided@^0.0.x":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@stdlib/strided/-/strided-0.0.12.tgz#86ac48e660cb7f64a45cf07e80cbbfe58be21ae1"
integrity sha512-1NINP+Y7IJht34iri/bYLY7TVxrip51f6Z3qWxGHUCH33kvk5H5QqV+RsmFEGbbyoGtdeHrT2O+xA+7R2e3SNg==
dependencies:
"@stdlib/assert" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/ndarray" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/string@^0.0.x":
version "0.0.13"
resolved "https://registry.yarnpkg.com/@stdlib/string/-/string-0.0.13.tgz#37457ca49e8d1dff0e523c68f5673c655c79eb2d"
integrity sha512-nGMHi7Qk9LBW0+Y+e3pSePQEBqyWH7+7DjFR1APcbsYccJE0p4aCaQdhPhx9Tp7j3uRGBmqPFek8wpcvIuC+CQ==
dependencies:
"@stdlib/assert" "^0.0.x"
"@stdlib/cli" "^0.0.x"
"@stdlib/constants" "^0.0.x"
"@stdlib/fs" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/nlp" "^0.0.x"
"@stdlib/process" "^0.0.x"
"@stdlib/regexp" "^0.0.x"
"@stdlib/streams" "^0.0.x"
"@stdlib/types" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/symbol@^0.0.x":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@stdlib/symbol/-/symbol-0.0.12.tgz#b9f396b0bf269c2985bb7fe99810a8e26d7288c3"
integrity sha512-2IDhpzWVGeLHgsvIsX12RXvf78r7xBkc4QLoRUv3k7Cp61BisR1Ym1p0Tq9PbxT8fknlvLToh9n5RpmESi2d4w==
dependencies:
"@stdlib/assert" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/time@^0.0.x":
version "0.0.14"
resolved "https://registry.yarnpkg.com/@stdlib/time/-/time-0.0.14.tgz#ea6daa438b1d3b019b99f5091117ee4bcef55d60"
integrity sha512-1gMFCQTabMVIgww+k4g8HHHIhyy1tIlvwT8mC0BHW7Q7TzDAgobwL0bvor+lwvCb5LlDAvNQEpaRgVT99QWGeQ==
dependencies:
"@stdlib/assert" "^0.0.x"
"@stdlib/cli" "^0.0.x"
"@stdlib/constants" "^0.0.x"
"@stdlib/fs" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/string" "^0.0.x"
"@stdlib/utils" "^0.0.x"
"@stdlib/types@^0.0.x":
version "0.0.14"
resolved "https://registry.yarnpkg.com/@stdlib/types/-/types-0.0.14.tgz#02d3aab7a9bfaeb86e34ab749772ea22f7b2f7e0"
integrity sha512-AP3EI9/il/xkwUazcoY+SbjtxHRrheXgSbWZdEGD+rWpEgj6n2i63hp6hTOpAB5NipE0tJwinQlDGOuQ1lCaCw==
"@stdlib/utils@^0.0.x":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@stdlib/utils/-/utils-0.0.12.tgz#670de5a7b253f04f11a4cba38f790e82393bcb46"
integrity sha512-+JhFpl6l7RSq/xGnbWRQ5dAL90h9ONj8MViqlb7teBZFtePZLMwoRA1wssypFcJ8SFMRWQn7lPmpYVUkGwRSOg==
dependencies:
"@stdlib/array" "^0.0.x"
"@stdlib/assert" "^0.0.x"
"@stdlib/blas" "^0.0.x"
"@stdlib/buffer" "^0.0.x"
"@stdlib/cli" "^0.0.x"
"@stdlib/constants" "^0.0.x"
"@stdlib/fs" "^0.0.x"
"@stdlib/math" "^0.0.x"
"@stdlib/os" "^0.0.x"
"@stdlib/process" "^0.0.x"
"@stdlib/random" "^0.0.x"
"@stdlib/regexp" "^0.0.x"
"@stdlib/streams" "^0.0.x"
"@stdlib/string" "^0.0.x"
"@stdlib/symbol" "^0.0.x"
"@stdlib/time" "^0.0.x"
"@stdlib/types" "^0.0.x"
debug "^2.6.9"
"@storybook/addon-actions@6.4.22", "@storybook/addon-actions@^6.4.22": "@storybook/addon-actions@6.4.22", "@storybook/addon-actions@^6.4.22":
version "6.4.22" version "6.4.22"
resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.4.22.tgz#ec1b4332e76a8021dc0a1375dfd71a0760457588" resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.4.22.tgz#ec1b4332e76a8021dc0a1375dfd71a0760457588"
@ -4038,10 +4367,10 @@
"@types/node" "*" "@types/node" "*"
form-data "^3.0.0" form-data "^3.0.0"
"@types/node@*", "@types/node@^17.0.32", "@types/node@^17.0.5": "@types/node@*", "@types/node@^17.0.33", "@types/node@^17.0.5":
version "17.0.32" version "17.0.33"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.32.tgz#51d59d7a90ef2d0ae961791e0900cad2393a0149" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.33.tgz#3c1879b276dc63e73030bb91165e62a4509cd506"
integrity sha512-eAIcfAvhf/BkHcf4pkLJ7ECpBAhh9kcxRBpip9cTiO+hf+aJrsxYxBeS6OXvOd9WqNAJmavXVpZvY1rBjNsXmw== integrity sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==
"@types/node@^14.0.10": "@types/node@^14.0.10":
version "14.18.16" version "14.18.16"
@ -4108,10 +4437,10 @@
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
"@types/react-dom@^18.0.0", "@types/react-dom@^18.0.2": "@types/react-dom@^18.0.0", "@types/react-dom@^18.0.4":
version "18.0.3" version "18.0.4"
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.3.tgz#a022ea08c75a476fe5e96b675c3e673363853831" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.4.tgz#dcbcadb277bcf6c411ceff70069424c57797d375"
integrity sha512-1RRW9kst+67gveJRYPxGmVy8eVJ05O43hg77G2j5m76/RFJtMbcfAs2viQ2UNsvvDg8F7OfQZx8qQcl6ymygaQ== integrity sha512-FgTtbqPOCI3dzZPZoC2T/sx3L34qxy99ITWn4eoSA95qPyXDMH0ALoAqUp49ITniiJFsXUVBtalh/KffMpg21Q==
dependencies: dependencies:
"@types/react" "*" "@types/react" "*"
@ -13678,10 +14007,10 @@ pretty-time@^1.1.0:
resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e"
integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==
prism-react-renderer@^1.2.1, prism-react-renderer@^1.3.1: prism-react-renderer@^1.3.1, prism-react-renderer@^1.3.3:
version "1.3.1" version "1.3.3"
resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz#88fc9d0df6bed06ca2b9097421349f8c2f24e30d" resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.3.tgz#9b5a4211a6756eee3c96fee9a05733abc0b0805c"
integrity sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ== integrity sha512-Viur/7tBTCH2HmYzwCHmt2rEFn+rdIWNIINXyg0StiISbDiIhHKhrFuEK8eMkKgvsIYSjgGqy/hNyucHp6FpoQ==
prismjs@^1.21.0, prismjs@^1.28.0: prismjs@^1.21.0, prismjs@^1.28.0:
version "1.28.0" version "1.28.0"
@ -14375,7 +14704,7 @@ read-pkg@^5.2.0:
parse-json "^5.0.0" parse-json "^5.0.0"
type-fest "^0.6.0" type-fest "^0.6.0"
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
version "2.3.7" version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==