## Integer and enum factors

This page lists the built-in methods and operators for creating random variables of type **int** and of type **enum**. For both static methods and operators, you can often pass in random variables as arguments e.g. `Variable<int>`

instead of int. For compactness, this is not shown in the syntax below.

These methods provide a convenient short alternative to using `Variable<T>.Factor`

and passing in the factor method, as described on this page.

#### Distribution Factors

A distribution factor creates a random variable from a parameterised distribution.

Distribution |
Syntax |
Description |
---|---|---|

Discrete |
`Variable.Discrete(double[] probs)` `Variable.Discrete(Vector probs)` |
Creates an int random variable from supplied array or vector of probabilities (which must add up to 1). The variable can take values between 0 and N-1 where N is the length of the array/vector. |

Discrete |
`Variable.DiscreteFromLogProbs(double[] logProbs)` |
Creates an int random variable from supplied array or vector of log probabilities. Equivalent to `Variable.Discrete(Variable.Softmax(logProbs))` . |

Discrete |
`Variable.EnumDiscrete<TEnum>(double[] probs)` `Variable.EnumDiscrete<TEnum>(Vector probs)` |
Creates an int random variable which can take values from 0 to size-1 with equal probability. |

Discrete enum |
`Variable.EnumDiscrete<TEnum>(double[] probs)` `Variable.EnumDiscrete<TEnum>(Vector probs)` |
Creates an enum random variable where the probability of each enum value is given by the specified array or vector. TEnum specifies the enum type. |

Discrete enum |
`Variable.EnumUniform<TEnum>()` |
Creates an enum random variable with equal probability of taking each possible value of the enumeration. TEnum specifies the enum type. |

Binomial |
`Variable.Binomial(int trialCount, double probSuccess)` |
Creates an int random variable which has a Binomial distribution with the specified probability of success per trial and number of trials |

Poisson |
`Variable.Poisson(double mean)` |
Creates an int random variable which has a Poisson distribution with the specified mean. |

#### Arihmetic Operations

Arithmetic operations are supported via operator overloads or static methods.

Operation |
Syntax |
Description |
---|---|---|

Plus |
a + b | Creates an int random variable equal to the sum of and `a` `b` |

Multiply |
a * b | Creates an intrandom variable equal to the product of and `a` `b` |

CountTrue |
`Variable.CountTrue(bool[] array)` |
Creates an int random variable which counts up the number of elements in the array that are true. |

#### Conversion Operations

Operation |
Syntax |
Description |
---|---|---|

EnumToInt |
`Variable.EnumToInt(TEnum v)` |
Creates an int random variable corresponding to an enum random variable. The returned variable can be used as the condition for a Switch or Case block. |