<!-- Generated with Stardoc: http://skydoc.bazel.build -->

<a name="#my_namespace.min"></a>

## my_namespace.min

<pre>
my_namespace.min(<a href="#my_namespace.min-integers">integers</a>)
</pre>

Returns the minimum of given elements.

### Parameters

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="my_namespace.min-integers">
      <td><code>integers</code></td>
      <td>
        required.
        <p>
          A list of integers. Must not be empty.
        </p>
      </td>
    </tr>
  </tbody>
</table>


<a name="#my_namespace.math.min"></a>

## my_namespace.math.min

<pre>
my_namespace.math.min(<a href="#my_namespace.math.min-integers">integers</a>)
</pre>

Returns the minimum of given elements.

### Parameters

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="my_namespace.math.min-integers">
      <td><code>integers</code></td>
      <td>
        required.
        <p>
          A list of integers. Must not be empty.
        </p>
      </td>
    </tr>
  </tbody>
</table>


<a name="#my_namespace.foo.bar.baz"></a>

## my_namespace.foo.bar.baz

<pre>
my_namespace.foo.bar.baz()
</pre>

This function does nothing.



<a name="#my_namespace.one.two.min"></a>

## my_namespace.one.two.min

<pre>
my_namespace.one.two.min(<a href="#my_namespace.one.two.min-integers">integers</a>)
</pre>

Returns the minimum of given elements.

### Parameters

<table class="params-table">
  <colgroup>
    <col class="col-param" />
    <col class="col-description" />
  </colgroup>
  <tbody>
    <tr id="my_namespace.one.two.min-integers">
      <td><code>integers</code></td>
      <td>
        required.
        <p>
          A list of integers. Must not be empty.
        </p>
      </td>
    </tr>
  </tbody>
</table>


<a name="#my_namespace.one.three.does_nothing"></a>

## my_namespace.one.three.does_nothing

<pre>
my_namespace.one.three.does_nothing()
</pre>

This function does nothing.



