.. 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.

Python API
==========

Overview
--------

This API section details functions, modules, and objects included in MXNet,
describing what they are and what they do. The APIs are grouped into the
following categories:


.. container:: cards

   .. card::
      :title: NDArray module
      :link: ndarray/index.html

      Imperative APIs to manipulate multi-dimensional arrays.

   .. card::
      :title: Gluon module
      :link: gluon/index.html

      Imperative APIs to load data, construct and train neural networks.

   .. card::
      :title: Gluon-related modules
      :link: gluon-related/index.html

      Modules, including context and optimizer, that can be used with Gluon.

   .. card::
      :title: Symbol module
      :link: symbol/index.html

      Symbolic APIs for multi-dimensional arrays and neural network layers.

   .. card::
      :title: Symbol-related modules
      :link: symbol-related/index.html

      Modules to train and visualize symbolic neural network models.

   .. card::
      :title: Advanced modules
      :link: advanced/index.html

      Advanced APIs for hackers.


.. toctree::
   :maxdepth: 1
   :hidden:

   ndarray/index
   gluon/index
   gluon-related/index
   symbol/index
   symbol-related/index
   advanced/index
