-type array() :: reference().
-type dtype() :: atom().
-type key() :: reference().
-type shape() :: [integer()].
-spec bernoulli(array()) -> {ok, array()} | {error, term()}.
-spec bernoulli(array(), shape()) -> {ok, array()} | {error, term()}.
-spec bernoulli(array(), shape(), dtype()) -> {ok, array()} | {error, term()}.
-spec beta(array(), array()) -> {ok, array()} | {error, term()}.
-spec beta(array(), array(), shape()) -> {ok, array()} | {error, term()}.
-spec beta(array(), array(), shape(), dtype()) -> {ok, array()} | {error, term()}.
-spec categorical(array()) -> {ok, array()} | {error, term()}.
-spec categorical(array(), shape()) -> {ok, array()} | {error, term()}.
-spec categorical(array(), shape(), dtype()) -> {ok, array()} | {error, term()}.
-spec choice(array()) -> {ok, array()} | {error, term()}.
-spec choice(array(), integer()) -> {ok, array()} | {error, term()}.
-spec choice(array(), integer(), boolean()) -> {ok, array()} | {error, term()}.
-spec exponential(array()) -> {ok, array()} | {error, term()}.
-spec exponential(array(), shape()) -> {ok, array()} | {error, term()}.
-spec exponential(array(), shape(), dtype()) -> {ok, array()} | {error, term()}.
-spec gamma(array(), array()) -> {ok, array()} | {error, term()}.
-spec gamma(array(), array(), shape()) -> {ok, array()} | {error, term()}.
-spec gamma(array(), array(), shape(), dtype()) -> {ok, array()} | {error, term()}.
-spec key(integer()) -> {ok, key()} | {error, term()}.
-spec multinomial(array(), integer()) -> {ok, array()} | {error, term()}.
-spec multinomial(array(), integer(), shape()) -> {ok, array()} | {error, term()}.
-spec multinomial(array(), integer(), shape(), dtype()) -> {ok, array()} | {error, term()}.
-spec normal(shape()) -> {ok, array()} | {error, term()}.
-spec normal(shape(), number()) -> {ok, array()} | {error, term()}.
-spec normal(shape(), number(), number()) -> {ok, array()} | {error, term()}.
-spec permutation(integer()) -> {ok, array()} | {error, term()}.
-spec permutation(array(), integer()) -> {ok, array()} | {error, term()}.
-spec poisson(array()) -> {ok, array()} | {error, term()}.
-spec poisson(array(), shape()) -> {ok, array()} | {error, term()}.
-spec poisson(array(), shape(), dtype()) -> {ok, array()} | {error, term()}.
-spec randint(integer(), shape()) -> {ok, array()} | {error, term()}.
-spec randint(integer(), integer(), shape()) -> {ok, array()} | {error, term()}.
-spec randint(integer(), integer(), shape(), dtype()) -> {ok, array()} | {error, term()}.
-spec seed(integer()) -> ok | {error, term()}.
-spec shuffle(array()) -> {ok, array()} | {error, term()}.
-spec shuffle(array(), integer()) -> {ok, array()} | {error, term()}.
-spec uniform(shape()) -> {ok, array()} | {error, term()}.
-spec uniform(shape(), number()) -> {ok, array()} | {error, term()}.
-spec uniform(shape(), number(), number()) -> {ok, array()} | {error, term()}.
-spec uniform(shape(), number(), number(), dtype()) -> {ok, array()} | {error, term()}.