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

tvm.contrib
-----------
.. automodule:: tvm.contrib

tvm.contrib.cblas
~~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.cblas
    :members:


tvm.contrib.clang
~~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.clang
    :members:


tvm.contrib.cc
~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.cc
    :members:


tvm.contrib.cublas
~~~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.cublas
    :members:


tvm.contrib.dlpack
~~~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.dlpack
    :members:


tvm.contrib.emcc
~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.emcc
    :members:


tvm.contrib.miopen
~~~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.miopen
    :members:


tvm.contrib.ndk
~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.ndk
    :members:


tvm.contrib.nnpack
~~~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.nnpack
    :members:


tvm.contrib.nvcc
~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.nvcc
    :members:


tvm.contrib.pickle_memoize
~~~~~~~~~~~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.pickle_memoize
    :members:


tvm.contrib.random
~~~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.random
    :members:


tvm.contrib.rocblas
~~~~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.rocblas
    :members:


tvm.contrib.rocm
~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.rocm
    :members:


tvm.contrib.spirv
~~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.spirv
    :members:


tvm.contrib.tar
~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.tar
    :members:


tvm.contrib.utils
~~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.utils
    :members:


tvm.contrib.xcode
~~~~~~~~~~~~~~~~~
.. automodule:: tvm.contrib.xcode
    :members:
