<!--- Licensed to the Apache Software Foundation (ASF) under one -->
<!--- or more contributor license agreements.  See the NOTICE file -->
<!--- distributed with this work for additional information -->
<!--- regarding copyright ownership.  The ASF licenses this file -->
<!--- to you under the Apache License, Version 2.0 (the -->
<!--- "License"); you may not use this file except in compliance -->
<!--- with the License.  You may obtain a copy of the License at -->

<!---   http://www.apache.org/licenses/LICENSE-2.0 -->

<!--- Unless required by applicable law or agreed to in writing, -->
<!--- software distributed under the License is distributed on an -->
<!--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -->
<!--- KIND, either express or implied.  See the License for the -->
<!--- specific language governing permissions and limitations -->
<!--- under the License. -->

# Random Distribution Generator Symbol API

```eval_rst
    .. currentmodule:: mxnet.symbol.random
```

## Overview

This document lists the random distribution generator routines of the symbolic expression package:

```eval_rst
.. autosummary::
    :nosignatures:

    mxnet.symbol.random
```

The `Random Distribution Generator Symbol` API, defined in the `symbol.random` package, provides
symbolic expressions for random distribution generator routines.

In the rest of this document, we list routines provided by the `symbol.random` package.

## Random Distribution Generator

```eval_rst
.. currentmodule:: mxnet.symbol.random

.. autosummary::
    :nosignatures:

    exponential
    gamma
    generalized_negative_binomial
    multinomial
    negative_binomial
    normal
    poisson
    randint
    shuffle
    uniform
    mxnet.random.seed
```

## API Reference

<script type="text/javascript" src='../../../_static/js/auto_module_index.js'></script>

```eval_rst

.. automodule:: mxnet.symbol.random
    :members:
    :noindex:

.. automodule:: mxnet.random
    :members:

```

<script>auto_index("api-reference");</script>
