Lots of documentation tweaks
This commit is contained in:
parent
a690cd15fd
commit
bb85869303
|
@ -273,6 +273,7 @@ let dispatchToGenericOutput = (
|
||||||
| ("cdf", [EvDistribution(dist), EvNumber(float)]) => Helpers.toFloatFn(#Cdf(float), dist, ~env)
|
| ("cdf", [EvDistribution(dist), EvNumber(float)]) => Helpers.toFloatFn(#Cdf(float), dist, ~env)
|
||||||
| ("pdf", [EvDistribution(dist), EvNumber(float)]) => Helpers.toFloatFn(#Pdf(float), dist, ~env)
|
| ("pdf", [EvDistribution(dist), EvNumber(float)]) => Helpers.toFloatFn(#Pdf(float), dist, ~env)
|
||||||
| ("inv", [EvDistribution(dist), EvNumber(float)]) => Helpers.toFloatFn(#Inv(float), dist, ~env)
|
| ("inv", [EvDistribution(dist), EvNumber(float)]) => Helpers.toFloatFn(#Inv(float), dist, ~env)
|
||||||
|
| ("quantile", [EvDistribution(dist), EvNumber(float)]) => Helpers.toFloatFn(#Inv(float), dist, ~env)
|
||||||
| ("toSampleSet", [EvDistribution(dist), EvNumber(float)]) =>
|
| ("toSampleSet", [EvDistribution(dist), EvNumber(float)]) =>
|
||||||
Helpers.toDistFn(ToSampleSet(Belt.Int.fromFloat(float)), dist, ~env)
|
Helpers.toDistFn(ToSampleSet(Belt.Int.fromFloat(float)), dist, ~env)
|
||||||
| ("toSampleSet", [EvDistribution(dist)]) =>
|
| ("toSampleSet", [EvDistribution(dist)]) =>
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
.docusaurus
|
.docusaurus
|
||||||
build
|
build
|
||||||
|
docs/Api/.*
|
|
@ -3,7 +3,10 @@ sidebar_position: 1
|
||||||
title: Date
|
title: Date
|
||||||
---
|
---
|
||||||
|
|
||||||
|
Squiggle date types are a very simple implementation on [Javascript's Date type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date). It's mainly here for early experimentation. There are more relevant functions for the [Duration](/docs/Api/Duration) type.
|
||||||
|
|
||||||
### makeFromYear
|
### makeFromYear
|
||||||
|
(Now ``makeDateFromYear``)
|
||||||
|
|
||||||
```
|
```
|
||||||
Date.makeFromYear: (number) => date
|
Date.makeFromYear: (number) => date
|
||||||
|
@ -19,6 +22,16 @@ makeFromYear(2022.32);
|
||||||
toString: (date) => string
|
toString: (date) => string
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### add
|
||||||
|
|
||||||
|
```
|
||||||
|
add: (date, duration) => date
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
makeFromYear(2022.32) + years(5);
|
||||||
|
```
|
||||||
|
|
||||||
### subtract
|
### subtract
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -30,13 +43,3 @@ subtract: (date, duration) => date
|
||||||
makeFromYear(2040) - makeFromYear(2020); // 20 years
|
makeFromYear(2040) - makeFromYear(2020); // 20 years
|
||||||
makeFromYear(2040) - years(20); // 2020
|
makeFromYear(2040) - years(20); // 2020
|
||||||
```
|
```
|
||||||
|
|
||||||
### add
|
|
||||||
|
|
||||||
```
|
|
||||||
add: (date, duration) => date
|
|
||||||
```
|
|
||||||
|
|
||||||
```js
|
|
||||||
makeFromYear(2022.32) + years(5);
|
|
||||||
```
|
|
||||||
|
|
|
@ -3,6 +3,33 @@ sidebar_position: 2
|
||||||
title: Dictionary
|
title: Dictionary
|
||||||
---
|
---
|
||||||
|
|
||||||
|
Squiggle dictionaries work similar to Python dictionaries. The syntax is similar to objects in Javascript.
|
||||||
|
|
||||||
|
Dictionaries are unordered and duplicates are not allowed. They are meant to be immutable, like most types in Squiggle.
|
||||||
|
|
||||||
|
**Example**
|
||||||
|
```javascript
|
||||||
|
valueFromOfficeItems = {
|
||||||
|
keyboard: 1,
|
||||||
|
chair: 0.01 to 0.5,
|
||||||
|
headphones: "ToDo"
|
||||||
|
}
|
||||||
|
|
||||||
|
valueFromHomeItems = {
|
||||||
|
monitor: 1,
|
||||||
|
bed: 0.2 to 0.6,
|
||||||
|
lights: 0.02 to 0.2,
|
||||||
|
coffee: 5 to 20
|
||||||
|
}
|
||||||
|
|
||||||
|
homeToItemsConversion = 0.1 to 0.4
|
||||||
|
|
||||||
|
conversionFn(i) = [i[0], i[1] * homeToItemsConversion]
|
||||||
|
updatedValueFromHomeItems = valueFromHomeItems |> Dict.toList |> map(conversionFn) |> Dict.fromList
|
||||||
|
|
||||||
|
allItems = merge(valueFromOfficeItems, updatedValueFromHomeItems)
|
||||||
|
```
|
||||||
|
|
||||||
### toList
|
### toList
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -3,140 +3,141 @@ sidebar_position: 3
|
||||||
title: Distribution
|
title: Distribution
|
||||||
---
|
---
|
||||||
|
|
||||||
import TOCInline from "@theme/TOCInline";
|
Distributions are the flagship data type in Squiggle. The distribution type is a generic data type that contains one of three different formats of distributions.
|
||||||
|
These subtypes are [point set](/docs/Api/DistPointSet), [sample set](/docs/Api/DistSampleSet), and symbolic. The first two of these have a few custom functions that only work on them. You can read more about the differences between these formats [here](/docs/Discussions/Three-Formats-Of-Distributions).
|
||||||
|
|
||||||
|
Several functions below only can work on particular distribution formats.
|
||||||
|
For example, scoring and pointwise math requires the point set format. When this happens, the types are automatically converted to the correct format. These conversions are lossy.
|
||||||
|
|
||||||
|
import TOCInline from "@theme/TOCInline"
|
||||||
|
|
||||||
<TOCInline toc={toc} />
|
<TOCInline toc={toc} />
|
||||||
|
|
||||||
## Distribution Creation
|
## Distribution Creation
|
||||||
|
|
||||||
### Normal Distribution
|
These are functions for creating primative distributions. Many of these could optionally take in distributions as inputs; in these cases, Monte Carlo Sampling will be used to generate the greater distribution. This can be used for simple hierarchical models.
|
||||||
|
|
||||||
|
See a longer tutorial on creating distributions [here](/docs/Guides/DistributionCreation).
|
||||||
|
|
||||||
|
### Normal
|
||||||
|
|
||||||
**Definitions**
|
**Definitions**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
normal: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
normal: (distribution|number, distribution|number) => distribution
|
||||||
```
|
normal: (dict<{p5: distribution|number, p95: distribution|number}>) => distribution
|
||||||
|
normal: (dict<{mean: distribution|number, stdev: distribution|number}>) => distribution
|
||||||
```javascript
|
|
||||||
normal: (dict<{p5: frValueDistOrNumber, p95: frValueDistOrNumber}>) => distribution
|
|
||||||
```
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
normal: (dict<{mean: frValueDistOrNumber, stdev: frValueDistOrNumber}>) => distribution
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```js
|
```js
|
||||||
normal(5, 1);
|
normal(5, 1)
|
||||||
normal({ p5: 4, p95: 10 });
|
normal({ p5: 4, p95: 10 })
|
||||||
normal({ mean: 5, stdev: 2 });
|
normal({ mean: 5, stdev: 2 })
|
||||||
|
normal(5 to 10, normal(3, 2))
|
||||||
|
normal({ mean: uniform(5, 9), stdev: 3 })
|
||||||
```
|
```
|
||||||
|
|
||||||
### Lognormal Distribution
|
### Lognormal
|
||||||
|
|
||||||
**Definitions**
|
**Definitions**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
lognormal: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
lognormal: (distribution|number, distribution|number) => distribution
|
||||||
```
|
lognormal: (dict<{p5: distribution|number, p95: distribution|number}>) => distribution
|
||||||
|
lognormal: (dict<{mean: distribution|number, stdev: distribution|number}>) => distribution
|
||||||
```javascript
|
|
||||||
lognormal: (dict<{p5: frValueDistOrNumber, p95: frValueDistOrNumber}>) => distribution
|
|
||||||
```
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
lognormal: (dict<{mean: frValueDistOrNumber, stdev: frValueDistOrNumber}>) => distribution
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
lognormal(0.5, 0.8);
|
lognormal(0.5, 0.8)
|
||||||
lognormal({ p5: 4, p95: 10 });
|
lognormal({ p5: 4, p95: 10 })
|
||||||
lognormal({ mean: 5, stdev: 2 });
|
lognormal({ mean: 5, stdev: 2 })
|
||||||
```
|
```
|
||||||
|
|
||||||
### Uniform Distribution
|
### Uniform
|
||||||
|
|
||||||
**Definitions**
|
**Definitions**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
uniform: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
uniform: (distribution|number, distribution|number) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
uniform(10, 12);
|
uniform(10, 12)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Beta Distribution
|
### Beta
|
||||||
|
|
||||||
**Definitions**
|
**Definitions**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
beta: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
beta: (distribution|number, distribution|number) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
beta(20, 25);
|
beta(20, 25)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Cauchy Distribution
|
### Cauchy
|
||||||
|
|
||||||
**Definitions**
|
**Definitions**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
cauchy: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
cauchy: (distribution|number, distribution|number) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
cauchy(5, 1);
|
cauchy(5, 1)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Gamma Distribution
|
### Gamma
|
||||||
|
|
||||||
**Definitions**
|
**Definitions**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
gamma: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
gamma: (distribution|number, distribution|number) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
gamma(5, 1);
|
gamma(5, 1)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Logistic Distribution
|
### Logistic
|
||||||
|
|
||||||
**Definitions**
|
**Definitions**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
logistic: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
logistic: (distribution|number, distribution|number) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
gamma(5, 1);
|
gamma(5, 1)
|
||||||
```
|
```
|
||||||
|
|
||||||
### To (Distribution)
|
### To (Distribution)
|
||||||
|
|
||||||
|
The `to` function is an easy way to generate simple distributions using predicted _5th_ and _95th_ percentiles.
|
||||||
|
|
||||||
|
If both values are above zero, a `lognormal` distribution is used. If not, a `normal` distribution is used.
|
||||||
|
|
||||||
**Definitions**
|
**Definitions**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
to: (frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
to: (distribution|number, distribution|number) => distribution
|
||||||
```
|
credibleIntervalToDistribution(distribution|number, distribution|number) => distribution
|
||||||
|
|
||||||
```javascript
|
|
||||||
credibleIntervalToDistribution(frValueDistOrNumber, frValueDistOrNumber) => distribution;
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
@ -152,13 +153,13 @@ to(5,10)
|
||||||
**Definitions**
|
**Definitions**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
exponential: (frValueDistOrNumber) => distribution;
|
exponential: (distribution|number) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
exponential(2);
|
exponential(2)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Bernoulli
|
### Bernoulli
|
||||||
|
@ -166,55 +167,13 @@ exponential(2);
|
||||||
**Definitions**
|
**Definitions**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
bernoulli: (frValueDistOrNumber) => distribution;
|
bernoulli: (distribution|number) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
bernoulli(0.5);
|
bernoulli(0.5)
|
||||||
```
|
|
||||||
|
|
||||||
### toContinuousPointSet
|
|
||||||
|
|
||||||
Converts a set of points to a continuous distribution
|
|
||||||
|
|
||||||
**Definitions**
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
toContinuousPointSet: (array<dict<{x: numeric, y: numeric}>>) => distribution
|
|
||||||
```
|
|
||||||
|
|
||||||
**Examples**
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
toContinuousPointSet([
|
|
||||||
{ x: 0, y: 0.1 },
|
|
||||||
{ x: 1, y: 0.2 },
|
|
||||||
{ x: 2, y: 0.15 },
|
|
||||||
{ x: 3, y: 0.1 },
|
|
||||||
]);
|
|
||||||
```
|
|
||||||
|
|
||||||
### toDiscretePointSet
|
|
||||||
|
|
||||||
Converts a set of points to a discrete distribution
|
|
||||||
|
|
||||||
**Definitions**
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
toDiscretePointSet: (array<dict<{x: numeric, y: numeric}>>) => distribution
|
|
||||||
```
|
|
||||||
|
|
||||||
**Examples**
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
toDiscretePointSet([
|
|
||||||
{ x: 0, y: 0.1 },
|
|
||||||
{ x: 1, y: 0.2 },
|
|
||||||
{ x: 2, y: 0.15 },
|
|
||||||
{ x: 3, y: 0.1 },
|
|
||||||
]);
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Functions
|
## Functions
|
||||||
|
@ -222,19 +181,21 @@ toDiscretePointSet([
|
||||||
### mixture
|
### mixture
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
mixture: (...distributionLike, weights:list<float>) => distribution
|
mixture: (...distributionLike, weights?:list<float>) => distribution
|
||||||
|
mixture: (list<distributionLike>, weights?:list<float>) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
mixture(normal(5, 1), normal(10, 1));
|
mixture(normal(5, 1), normal(10, 1), 8)
|
||||||
mx(normal(5, 1), normal(10, 1), [0.3, 0.7]);
|
mx(normal(5, 1), normal(10, 1), [0.3, 0.7])
|
||||||
|
mx([normal(5, 1), normal(10, 1)], [0.3, 0.7])
|
||||||
```
|
```
|
||||||
|
|
||||||
### sample
|
### sample
|
||||||
|
|
||||||
Get one random sample from the distribution
|
One random sample from the distribution
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
sample(distribution) => number
|
sample(distribution) => number
|
||||||
|
@ -243,12 +204,12 @@ sample(distribution) => number
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
sample(normal(5, 2));
|
sample(normal(5, 2))
|
||||||
```
|
```
|
||||||
|
|
||||||
### sampleN
|
### sampleN
|
||||||
|
|
||||||
Get n random samples from the distribution
|
N random samples from the distribution
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
sampleN: (distribution, number) => list<number>
|
sampleN: (distribution, number) => list<number>
|
||||||
|
@ -257,75 +218,79 @@ sampleN: (distribution, number) => list<number>
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
sample: normal(5, 2), 100;
|
sampleN(normal(5, 2), 100)
|
||||||
```
|
```
|
||||||
|
|
||||||
### mean
|
### mean
|
||||||
|
|
||||||
Get the distribution mean
|
The distribution mean
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
mean: (distribution) => number;
|
mean: (distribution) => number
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
mean: normal(5, 2);
|
mean(normal(5, 2))
|
||||||
```
|
```
|
||||||
|
|
||||||
### stdev
|
### stdev
|
||||||
|
|
||||||
|
Standard deviation. Only works now on sample set distributions (so converts other distributions into sample set in order to calculate.)
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
stdev: (distribution) => number;
|
stdev: (distribution) => number
|
||||||
```
|
```
|
||||||
|
|
||||||
### variance
|
### variance
|
||||||
|
Variance. Similar to stdev, only works now on sample set distributions.
|
||||||
|
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
variance: (distribution) => number;
|
variance: (distribution) => number
|
||||||
```
|
```
|
||||||
|
|
||||||
### mode
|
### mode
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
mode: (distribution) => number;
|
mode: (distribution) => number
|
||||||
```
|
```
|
||||||
|
|
||||||
### cdf
|
### cdf
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
cdf: (distribution, number) => number;
|
cdf: (distribution, number) => number
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
cdf: normal(5, 2), 3;
|
cdf(normal(5, 2), 3)
|
||||||
```
|
```
|
||||||
|
|
||||||
### pdf
|
### pdf
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
pdf: (distribution, number) => number;
|
pdf: (distribution, number) => number
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
pdf(normal(5, 2), 3);
|
pdf(normal(5, 2), 3)
|
||||||
```
|
```
|
||||||
|
|
||||||
### inv
|
### quantile
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
inv: (distribution, number) => number;
|
quantile: (distribution, number) => number
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
inv(normal(5, 2), 0.5);
|
quantile(normal(5, 2), 0.5)
|
||||||
```
|
```
|
||||||
|
|
||||||
### toPointSet
|
### toPointSet
|
||||||
|
@ -333,13 +298,13 @@ inv(normal(5, 2), 0.5);
|
||||||
Converts a distribution to the pointSet format
|
Converts a distribution to the pointSet format
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
toPointSet: (distribution) => pointSetDistribution;
|
toPointSet: (distribution) => pointSetDistribution
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
toPointSet(normal(5, 2));
|
toPointSet(normal(5, 2))
|
||||||
```
|
```
|
||||||
|
|
||||||
### toSampleSet
|
### toSampleSet
|
||||||
|
@ -347,13 +312,13 @@ toPointSet(normal(5, 2));
|
||||||
Converts a distribution to the sampleSet format, with n samples
|
Converts a distribution to the sampleSet format, with n samples
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
toSampleSet: (distribution, number) => sampleSetDistribution;
|
toSampleSet: (distribution, number) => sampleSetDistribution
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
toSampleSet(normal(5, 2), 1000);
|
toSampleSet(normal(5, 2), 1000)
|
||||||
```
|
```
|
||||||
|
|
||||||
### truncateLeft
|
### truncateLeft
|
||||||
|
@ -367,7 +332,7 @@ truncateLeft: (distribution, l => number) => distribution
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
truncateLeft(normal(5, 2), 3);
|
truncateLeft(normal(5, 2), 3)
|
||||||
```
|
```
|
||||||
|
|
||||||
### truncateRight
|
### truncateRight
|
||||||
|
@ -381,23 +346,21 @@ truncateRight: (distribution, r => number) => distribution
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
truncateLeft(normal(5, 2), 6);
|
truncateLeft(normal(5, 2), 6)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Scoring
|
|
||||||
|
|
||||||
### klDivergence
|
### klDivergence
|
||||||
|
|
||||||
Kullback–Leibler divergence between two distributions
|
[Kullback–Leibler divergence](https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence) between two distributions.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
klDivergence: (distribution, distribution) => number;
|
klDivergence: (distribution, distribution) => number
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
klDivergence(normal(5, 2), normal(5, 4)); // returns 0.57
|
klDivergence(normal(5, 2), normal(5, 4)) // returns 0.57
|
||||||
```
|
```
|
||||||
|
|
||||||
## Display
|
## Display
|
||||||
|
@ -405,13 +368,13 @@ klDivergence(normal(5, 2), normal(5, 4)); // returns 0.57
|
||||||
### toString
|
### toString
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
toString: (distribution) => string;
|
toString: (distribution) => string
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
toString(normal(5, 2));
|
toString(normal(5, 2))
|
||||||
```
|
```
|
||||||
|
|
||||||
### toSparkline
|
### toSparkline
|
||||||
|
@ -419,13 +382,13 @@ toString(normal(5, 2));
|
||||||
Produce a sparkline of length n
|
Produce a sparkline of length n
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
toSparkline: (distribution, n = 20) => string;
|
toSparkline: (distribution, n = 20) => string
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
toSparkline(normal(5, 2), 10);
|
toSparkline(normal(5, 2), 10)
|
||||||
```
|
```
|
||||||
|
|
||||||
### inspect
|
### inspect
|
||||||
|
@ -433,13 +396,13 @@ toSparkline(normal(5, 2), 10);
|
||||||
Prints the value of the distribution to the Javascript console, then returns the distribution.
|
Prints the value of the distribution to the Javascript console, then returns the distribution.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
inspect: (distribution) => distribution;
|
inspect: (distribution) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
inspect(normal(5, 2));
|
inspect(normal(5, 2))
|
||||||
```
|
```
|
||||||
|
|
||||||
## Normalization
|
## Normalization
|
||||||
|
@ -449,13 +412,13 @@ inspect(normal(5, 2));
|
||||||
Normalize a distribution. This means scaling it appropriately so that it's cumulative sum is equal to 1.
|
Normalize a distribution. This means scaling it appropriately so that it's cumulative sum is equal to 1.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
normalize: (distribution) => distribution;
|
normalize: (distribution) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
normalize(normal(5, 2));
|
normalize(normal(5, 2))
|
||||||
```
|
```
|
||||||
|
|
||||||
### isNormalized
|
### isNormalized
|
||||||
|
@ -463,13 +426,13 @@ normalize(normal(5, 2));
|
||||||
Check of a distribution is normalized. Most distributions are typically normalized, but there are some commands that could produce non-normalized distributions.
|
Check of a distribution is normalized. Most distributions are typically normalized, but there are some commands that could produce non-normalized distributions.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
isNormalized: (distribution) => bool;
|
isNormalized: (distribution) => bool
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
isNormalized(normal(5, 2)); // returns true
|
isNormalized(normal(5, 2)) // returns true
|
||||||
```
|
```
|
||||||
|
|
||||||
### integralSum
|
### integralSum
|
||||||
|
@ -477,33 +440,51 @@ isNormalized(normal(5, 2)); // returns true
|
||||||
Get the sum of the integral of a distribution. If the distribution is normalized, this will be 1.
|
Get the sum of the integral of a distribution. If the distribution is normalized, this will be 1.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
integralSum: (distribution) => number;
|
integralSum: (distribution) => number
|
||||||
```
|
```
|
||||||
|
|
||||||
**Examples**
|
**Examples**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
integralSum(normal(5, 2));
|
integralSum(normal(5, 2))
|
||||||
```
|
```
|
||||||
|
|
||||||
## Algebraic Operations
|
## Regular Arithmetic Operations
|
||||||
|
|
||||||
|
Regular arithmetic operations cover the basic mathematical operations on distributions. They work much like their equivalent operations on numbers.
|
||||||
|
|
||||||
|
The infixes ``+``,``-``, ``*``, ``/``, ``^``, ``-`` are supported for addition, subtraction, multiplication, division, power, and unaryMinus.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
pointMass(5 + 10) == pointMass(5) + pointMass(10)
|
||||||
|
```
|
||||||
|
|
||||||
### add
|
### add
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
add: (distributionLike, distributionLike) => distribution;
|
add: (distributionLike, distributionLike) => distribution
|
||||||
|
```
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
normal(0,1) + normal(1,3) // returns normal(1, 3.16...)
|
||||||
|
add(normal(0,1), normal(1,3)) // returns normal(1, 3.16...)
|
||||||
```
|
```
|
||||||
|
|
||||||
### sum
|
### sum
|
||||||
|
**Todo: Not yet implemented for distributions**
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
sum: (list<distributionLike>) => distribution
|
sum: (list<distributionLike>) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
sum([normal(0,1), normal(1,3), uniform(10,1)])
|
||||||
|
```
|
||||||
|
|
||||||
### multiply
|
### multiply
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
multiply: (distributionLike, distributionLike) => distribution;
|
multiply: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### product
|
### product
|
||||||
|
@ -515,118 +496,123 @@ product: (list<distributionLike>) => distribution
|
||||||
### subtract
|
### subtract
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
subtract: (distributionLike, distributionLike) => distribution;
|
subtract: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### divide
|
### divide
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
divide: (distributionLike, distributionLike) => distribution;
|
divide: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### pow
|
### pow
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
pow: (distributionLike, distributionLike) => distribution;
|
pow: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### exp
|
### exp
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
exp: (distributionLike, distributionLike) => distribution;
|
exp: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### log
|
### log
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
log: (distributionLike, distributionLike) => distribution;
|
log: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### log10
|
### log10
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
log10: (distributionLike, distributionLike) => distribution;
|
log10: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### unaryMinus
|
### unaryMinus
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
unaryMinus: (distribution) => distribution;
|
unaryMinus: (distribution) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
## Pointwise Operations
|
```javascript
|
||||||
|
-(normal(5,2)) // same as normal(-5, 2)
|
||||||
|
unaryMinus(normal(5,2)) // same as normal(-5, 2)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pointwise Arithmetic Operations
|
||||||
|
|
||||||
### dotAdd
|
### dotAdd
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
dotAdd: (distributionLike, distributionLike) => distribution;
|
dotAdd: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### dotMultiply
|
### dotMultiply
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
dotMultiply: (distributionLike, distributionLike) => distribution;
|
dotMultiply: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### dotSubtract
|
### dotSubtract
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
dotSubtract: (distributionLike, distributionLike) => distribution;
|
dotSubtract: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### dotDivide
|
### dotDivide
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
dotDivide: (distributionLike, distributionLike) => distribution;
|
dotDivide: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### dotPow
|
### dotPow
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
dotPow: (distributionLike, distributionLike) => distribution;
|
dotPow: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### dotExp
|
### dotExp
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
dotExp: (distributionLike, distributionLike) => distribution;
|
dotExp: (distributionLike, distributionLike) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
## Scale Operations
|
## Scale Arithmetic Operations
|
||||||
|
|
||||||
### scaleMultiply
|
### scaleMultiply
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
scaleMultiply: (distributionLike, number) => distribution;
|
scaleMultiply: (distributionLike, number) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### scalePow
|
### scalePow
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
scalePow: (distributionLike, number) => distribution;
|
scalePow: (distributionLike, number) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### scaleExp
|
### scaleExp
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
scaleExp: (distributionLike, number) => distribution;
|
scaleExp: (distributionLike, number) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### scaleLog
|
### scaleLog
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
scaleLog: (distributionLike, number) => distribution;
|
scaleLog: (distributionLike, number) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
### scaleLog10
|
### scaleLog10
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
scaleLog10: (distributionLike, number) => distribution;
|
scaleLog10: (distributionLike, number) => distribution
|
||||||
```
|
```
|
||||||
|
|
||||||
## Special
|
## Special
|
||||||
|
|
||||||
### Declaration (Continuous Function)
|
### Declaration (Continuous Functions)
|
||||||
|
|
||||||
Adds metadata to a function of the input ranges. Works now for numeric and date inputs. This is useful when making predictions. It allows you to limit the domain that your prediction will be used and scored within.
|
Adds metadata to a function of the input ranges. Works now for numeric and date inputs. This is useful when making predictions. It allows you to limit the domain that your prediction will be used and scored within.
|
||||||
|
|
||||||
|
|
|
@ -5,18 +5,46 @@ title: Point Set Distribution
|
||||||
|
|
||||||
### make
|
### make
|
||||||
|
|
||||||
|
Converts the distribution in question into a point set distribution. If the distribution is symbolic, then it does this by taking the quantiles. If the distribution is a sample set, then it uses a version of kernel density estimation to approximate the point set format. One complication of this latter process is that if there is a high proportion of overlapping samples (samples that are exactly the same as each other), it will convert these samples into discrete point masses. Eventually we'd like to add further methods to help adjust this process.
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
PointSet.make: (distribution) => pointSetDist
|
PointSet.make: (distribution) => pointSetDist
|
||||||
```
|
```
|
||||||
|
|
||||||
### makeContinuous
|
### makeContinuous
|
||||||
|
|
||||||
|
**TODO: Now called "toContinuousPointSet"**
|
||||||
|
|
||||||
|
Converts a set of x-y coordinates directly into a continuous distribution.
|
||||||
|
|
||||||
```
|
```
|
||||||
PointSet.makeContinuous: (list<{x: number, y: number}>) => pointSetDist
|
PointSet.makeContinuous: (list<{x: number, y: number}>) => pointSetDist
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
PointSet.makeContinuous([
|
||||||
|
{ x: 0, y: 0.1 },
|
||||||
|
{ x: 1, y: 0.2 },
|
||||||
|
{ x: 2, y: 0.15 },
|
||||||
|
{ x: 3, y: 0.1 },
|
||||||
|
])
|
||||||
|
```
|
||||||
|
|
||||||
### makeDiscrete
|
### makeDiscrete
|
||||||
|
**TODO: Now called "toDiscretePointSet"**
|
||||||
|
|
||||||
|
Converts a set of x-y coordinates directly into a discrete distribution.
|
||||||
|
|
||||||
```
|
```
|
||||||
PointSet.makeDiscrete: (list<{x: number, y: number}>) => pointSetDist
|
PointSet.makeDiscrete: (list<{x: number, y: number}>) => pointSetDist
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
toDiscretePointSet([
|
||||||
|
{ x: 0, y: 0.1 },
|
||||||
|
{ x: 1, y: 0.2 },
|
||||||
|
{ x: 2, y: 0.15 },
|
||||||
|
{ x: 3, y: 0.1 },
|
||||||
|
])
|
||||||
|
```
|
||||||
|
|
|
@ -3,6 +3,10 @@ sidebar_position: 6
|
||||||
title: Duration
|
title: Duration
|
||||||
---
|
---
|
||||||
|
|
||||||
|
Duration works with the [Date](/docs/Api/Date) type. Similar to the Date implementation, the Duration functions are early and experimental. There is no support yet for date or duration probability distributions.
|
||||||
|
|
||||||
|
Durations are stored in Unix milliseconds.
|
||||||
|
|
||||||
import TOCInline from "@theme/TOCInline";
|
import TOCInline from "@theme/TOCInline";
|
||||||
|
|
||||||
<TOCInline toc={toc} />
|
<TOCInline toc={toc} />
|
||||||
|
|
|
@ -91,7 +91,7 @@ The `mixture` mixes combines multiple distributions to create a mixture. You can
|
||||||
|
|
||||||
### Arguments
|
### Arguments
|
||||||
|
|
||||||
- `distributions`: A set of distributions or numbers, each passed as a paramater. Numbers will be converted into Delta distributions.
|
- `distributions`: A set of distributions or numbers, each passed as a paramater. Numbers will be converted into point mass distributions.
|
||||||
- `weights`: An optional array of numbers, each representing the weight of its corresponding distribution. The weights will be re-scaled to add to `1.0`. If a weights array is provided, it must be the same length as the distribution paramaters.
|
- `weights`: An optional array of numbers, each representing the weight of its corresponding distribution. The weights will be re-scaled to add to `1.0`. If a weights array is provided, it must be the same length as the distribution paramaters.
|
||||||
|
|
||||||
### Aliases
|
### Aliases
|
||||||
|
@ -221,22 +221,22 @@ Creates a [uniform distribution](<https://en.wikipedia.org/wiki/Uniform_distribu
|
||||||
</p>
|
</p>
|
||||||
</Admonition>
|
</Admonition>
|
||||||
|
|
||||||
## Delta
|
## Point Mass
|
||||||
|
|
||||||
`delta(value:number)`
|
`pointMass(value:number)`
|
||||||
|
|
||||||
Creates a discrete distribution with all of its probability mass at point `value`.
|
Creates a discrete distribution with all of its probability mass at point `value`.
|
||||||
|
|
||||||
Few Squiggle users call the function `delta()` directly. Numbers are converted into delta distributions automatically, when it is appropriate.
|
Few Squiggle users call the function `pointMass()` directly. Numbers are converted into point mass distributions automatically, when it is appropriate.
|
||||||
|
|
||||||
For example, in the function `mixture(1,2,normal(5,2))`, the first two arguments will get converted into delta distributions
|
For example, in the function `mixture(1,2,normal(5,2))`, the first two arguments will get converted into point mass distributions
|
||||||
with values at 1 and 2. Therefore, this is the same as `mixture(delta(1),delta(2),normal(5,2))`.
|
with values at 1 and 2. Therefore, this is the same as `mixture(pointMass(1),pointMass(2),pointMass(5,2))`.
|
||||||
|
|
||||||
`Delta()` distributions are currently the only discrete distributions accessible in Squiggle.
|
`pointMass()` distributions are currently the only discrete distributions accessible in Squiggle.
|
||||||
|
|
||||||
<Tabs>
|
<Tabs>
|
||||||
<TabItem value="ex1" label="delta(3)" default>
|
<TabItem value="ex1" label="pointMass(3)" default>
|
||||||
<SquiggleEditor initialSquiggleString="delta(3)" />
|
<SquiggleEditor initialSquiggleString="pointMass(3)" />
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem value="ex3" label="mixture(1,3,5)">
|
<TabItem value="ex3" label="mixture(1,3,5)">
|
||||||
<SquiggleEditor initialSquiggleString="mixture(1,3,5)" />
|
<SquiggleEditor initialSquiggleString="mixture(1,3,5)" />
|
|
@ -170,7 +170,7 @@ given point x.
|
||||||
### Cumulative density function
|
### Cumulative density function
|
||||||
|
|
||||||
The `cdf(dist, x)` gives the cumulative probability of the distribution
|
The `cdf(dist, x)` gives the cumulative probability of the distribution
|
||||||
or all values lower than x. It is the inverse of `inv`.
|
or all values lower than x. It is the inverse of `quantile`.
|
||||||
|
|
||||||
<SquiggleEditor initialSquiggleString="cdf(normal(0,1),0)" />
|
<SquiggleEditor initialSquiggleString="cdf(normal(0,1),0)" />
|
||||||
|
|
||||||
|
@ -179,13 +179,13 @@ or all values lower than x. It is the inverse of `inv`.
|
||||||
- `x` must be a scalar
|
- `x` must be a scalar
|
||||||
- `dist` must be a distribution
|
- `dist` must be a distribution
|
||||||
|
|
||||||
### Inverse CDF
|
### Quantile
|
||||||
|
|
||||||
The `inv(dist, prob)` gives the value x or which the probability for all values
|
The `quantile(dist, prob)` gives the value x or which the probability for all values
|
||||||
lower than x is equal to prob. It is the inverse of `cdf`. In the literature, it
|
lower than x is equal to prob. It is the inverse of `cdf`. In the literature, it
|
||||||
is also known as the quantiles function.
|
is also known as the quantiles function.
|
||||||
|
|
||||||
<SquiggleEditor initialSquiggleString="inv(normal(0,1),0.5)" />
|
<SquiggleEditor initialSquiggleString="quantile(normal(0,1),0.5)" />
|
||||||
|
|
||||||
#### Validity
|
#### Validity
|
||||||
|
|
||||||
|
|
|
@ -122,14 +122,14 @@ TODO
|
||||||
|
|
||||||
TODO
|
TODO
|
||||||
|
|
||||||
## `pdf`, `cdf`, and `inv`
|
## `pdf`, `cdf`, and `quantile`
|
||||||
|
|
||||||
With $\forall dist, pdf := x \mapsto \texttt{pdf}(dist, x) \land cdf := x \mapsto \texttt{cdf}(dist, x) \land inv := p \mapsto \texttt{inv}(dist, p)$,
|
With $\forall dist, pdf := x \mapsto \texttt{pdf}(dist, x) \land cdf := x \mapsto \texttt{cdf}(dist, x) \land quantile := p \mapsto \texttt{quantile}(dist, p)$,
|
||||||
|
|
||||||
### `cdf` and `inv` are inverses
|
### `cdf` and `quantile` are inverses
|
||||||
|
|
||||||
$$
|
$$
|
||||||
\forall x \in (0,1), cdf(inv(x)) = x \land \forall x \in \texttt{dom}(cdf), x = inv(cdf(x))
|
\forall x \in (0,1), cdf(quantile(x)) = x \land \forall x \in \texttt{dom}(cdf), x = quantile(cdf(x))
|
||||||
$$
|
$$
|
||||||
|
|
||||||
### The codomain of `cdf` equals the open interval `(0,1)` equals the codomain of `pdf`
|
### The codomain of `cdf` equals the open interval `(0,1)` equals the codomain of `pdf`
|
||||||
|
|
|
@ -25,7 +25,7 @@ $$
|
||||||
a \cdot Normal(\mu, \sigma) = Normal(a \cdot \mu, |a| \cdot \sigma)
|
a \cdot Normal(\mu, \sigma) = Normal(a \cdot \mu, |a| \cdot \sigma)
|
||||||
$$
|
$$
|
||||||
|
|
||||||
We can now look at the inverse cdf of a $Normal(0,1)$. We find that the 95% point is reached at $1.6448536269514722$. ([source](https://stackoverflow.com/questions/20626994/how-to-calculate-the-inverse-of-the-normal-cumulative-distribution-function-in-p)) This means that the 90% confidence interval is $[-1.6448536269514722, 1.6448536269514722]$, which has a width of $2 \cdot 1.6448536269514722$.
|
We can now look at the quantile of a $Normal(0,1)$. We find that the 95% point is reached at $1.6448536269514722$. ([source](https://stackoverflow.com/questions/20626994/how-to-calculate-the-inverse-of-the-normal-cumulative-distribution-function-in-p)) This means that the 90% confidence interval is $[-1.6448536269514722, 1.6448536269514722]$, which has a width of $2 \cdot 1.6448536269514722$.
|
||||||
|
|
||||||
So then, if we take a $Normal(0,1)$ and we multiply it by $\frac{(high -. low)}{(2. *. 1.6448536269514722)}$, it's 90% confidence interval will be multiplied by the same amount. Then we just have to shift it by the mean to get our target normal.
|
So then, if we take a $Normal(0,1)$ and we multiply it by $\frac{(high -. low)}{(2. *. 1.6448536269514722)}$, it's 90% confidence interval will be multiplied by the same amount. Then we just have to shift it by the mean to get our target normal.
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ const config = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "doc",
|
type: "doc",
|
||||||
docId: "Api/Dictionary",
|
docId: "Api/DistGeneric",
|
||||||
position: "left",
|
position: "left",
|
||||||
label: "API",
|
label: "API",
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue
Block a user