deploy: 13678c09ce0fb46c90880617147e7cdfdbe05d25

This commit is contained in:
csukuangfj 2022-07-03 07:05:51 +00:00
commit f55ccdc5c5
61 changed files with 19805 additions and 0 deletions

4
.buildinfo Normal file
View File

@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 60f49dfa167453c6d64de0a2ab3ad84e
tags: 645f666f9bcd5a90fca523b33c5a78b7

0
.nojekyll Normal file
View File

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="94" height="20" role="img" aria-label="cuda: &gt;= 10.1"><title>cuda: &gt;= 10.1</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="94" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="37" height="20" fill="#555"/><rect x="37" width="57" height="20" fill="#fe7d37"/><rect width="94" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="195" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="270">cuda</text><text x="195" y="140" transform="scale(.1)" fill="#fff" textLength="270">cuda</text><text aria-hidden="true" x="645" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="470">&gt;= 10.1</text><text x="645" y="140" transform="scale(.1)" fill="#fff" textLength="470">&gt;= 10.1</text></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

1
_images/os-green.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="176" height="20" role="img" aria-label="os: Linux | macOS | Windows"><title>os: Linux | macOS | Windows</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="176" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="23" height="20" fill="#555"/><rect x="23" width="153" height="20" fill="#97ca00"/><rect width="176" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="125" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="130">os</text><text x="125" y="140" transform="scale(.1)" fill="#fff" textLength="130">os</text><text aria-hidden="true" x="985" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="1430">Linux | macOS | Windows</text><text x="985" y="140" transform="scale(.1)" fill="#fff" textLength="1430">Linux | macOS | Windows</text></g></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="98" height="20" role="img" aria-label="python: &gt;= 3.6"><title>python: &gt;= 3.6</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="98" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="49" height="20" fill="#555"/><rect x="49" width="49" height="20" fill="#007ec6"/><rect width="98" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="255" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="390">python</text><text x="255" y="140" transform="scale(.1)" fill="#fff" textLength="390">python</text><text aria-hidden="true" x="725" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="390">&gt;= 3.6</text><text x="725" y="140" transform="scale(.1)" fill="#fff" textLength="390">&gt;= 3.6</text></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="112" height="20" role="img" aria-label="pytorch: &gt;= 1.5.0"><title>pytorch: &gt;= 1.5.0</title><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="112" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#r)"><rect width="51" height="20" fill="#555"/><rect x="51" width="61" height="20" fill="#97ca00"/><rect width="112" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><text aria-hidden="true" x="265" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="410">pytorch</text><text x="265" y="140" transform="scale(.1)" fill="#fff" textLength="410">pytorch</text><text aria-hidden="true" x="805" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">&gt;= 1.5.0</text><text x="805" y="140" transform="scale(.1)" fill="#fff" textLength="510">&gt;= 1.5.0</text></g></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

16
_sources/index.rst.txt Normal file
View File

@ -0,0 +1,16 @@
.. kaldifeat documentation master file, created by
sphinx-quickstart on Fri Jul 16 20:15:27 2021.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
kaldifeat
=========
.. toctree::
:maxdepth: 2
:caption: Contents:
intro
installation
usage/index

View File

@ -0,0 +1,167 @@
Installation
============
- |os_types|
- |python_versions|
- |pytorch_versions|
- |cuda_versions|
.. caution::
`kaldifeat`_ depends on `PyTorch`_. `PyTorch`_ >= 1.5.0 is known to work.
Please first install `PyTorch`_ before you install `kaldifeat`_.
.. hint::
To install a CPU version of `kaldifeat`_, please install a CPU version
of `PyTorch`_.
To install a CUDA version of `kaldifeat`_, please install a CUDA version
of `PyTorch`_. CUDA >= 10.1 is known to work.
.. _from source:
Install kaldifeat from source
-----------------------------
You have to install ``cmake`` and `PyTorch`_ first.
- ``cmake`` 3.11 is known to work. Other CMake versions may also work.
- `PyTorch`_ >= 1.5.0 is known to work. Other PyTorch versions may also work.
- Python >= 3.6
The commands to install `kaldifeat`_ from source are:
.. code-block:: bash
git clone https://github.com/csukuangfj/kaldifeat
cd kaldifeat
python3 setup.py install
To test that you have installed `kaldifeat`_ successfully, please run:
.. code-block:: bash
python3 -c "import kaldifeat; print(kaldifeat.__version__)"
It should print the version, e.g., ``1.0``.
.. _from PyPI:
Install kaldifeat from PyPI
---------------------------
The command to install `kaldifeat`_ from PyPI is:
.. code-block:: bash
pip install --verbose kaldifeat
To test that you have installed `kaldifeat`_ successfully, please run:
.. code-block:: bash
python3 -c "import kaldifeat; print(kaldifeat.__version__)"
It should print the version, e.g., ``1.0``.
Install kaldifeat from conda (Only for Linux)
---------------------------------------------
.. hint::
Installation using ``conda`` supports only Linux. For macOS and Windows,
please use either :ref:`from source` or :ref:`from PyPI`.
The command to install `kaldifeat` using ``conda`` is
.. code-block:: bash
conda install -c kaldifeat -c pytorch -c conda-forge kaldifeat python=3.8 cudatoolkit=11.1 pytorch=1.8.1
You can select the supported Python version, CUDA toolkit version and `PyTorch`_ version as you wish.
To install a CPU version of `kaldifeat`, use:
.. code-block:: bash
conda install -c kaldifeat -c pytorch cpuonly kaldifeat python=3.8 pytorch=1.8.1
.. caution::
If you encounter issues about missing GLIBC after installing `kaldifeat`_
with ``conda``, please consider :ref:`from source` or :ref:`from PyPI`.
The reason is that the package was built using Ubuntu 18.04 and your system's
GLIBC is older.
.. |os_types| image:: ./images/os-green.svg
:alt: Supported operating systems
.. |python_versions| image:: ./images/python_ge_3.6-blue.svg
:alt: Supported python versions
.. |cuda_versions| image:: ./images/cuda_ge_10.1-orange.svg
:alt: Supported cuda versions
.. |pytorch_versions| image:: ./images/pytorch_ge_1.5.0-green.svg
:alt: Supported pytorch versions
To test that you have installed `kaldifeat`_ successfully, please run:
.. code-block:: bash
python3 -c "import kaldifeat; print(kaldifeat.__version__)"
It should print the version, e.g., ``1.0``.
FAQs
----
How to install a CUDA version of kaldifeat
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
You need to first install a CUDA version of `PyTorch`_ and then install `kaldifeat`_.
.. note::
You can use a CUDA version of `kaldifeat`_ on machines with no GPUs.
How to install a CPU version of kaldifeat
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
You need to first install a CPU version of `PyTorch`_ and then install `kaldifeat`_.
How to fix `Caffe2: Cannot find cuDNN library`
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block::
Your installed Caffe2 version uses cuDNN but I cannot find the cuDNN
libraries. Please set the proper cuDNN prefixes and / or install cuDNN.
You will have such an error when you want to install a CUDA version of `kaldifeat`_
by ``pip install kaldifeat`` or from source.
You need to first install cuDNN. Assume you have installed cuDNN to the
path ``/path/to/cudnn``. You can fix the error by using ``one`` of the following
commands.
(1) Fix for installation using ``pip install``
.. code-block:: bash
export KALDIFEAT_CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCUDNN_LIBRARY_PATH=/path/to/cudnn/lib/libcudnn.so -DCUDNN_INCLUDE_PATH=/path/to/cudnn/include"
pip install --verbose kaldifeat
(2) Fix for installation from source
.. code-block:: bash
mkdir /some/path
git clone https://github.com/csukuangfj/kaldifeat.git
cd kaldifeat
export KALDIFEAT_CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release -DCUDNN_LIBRARY_PATH=/path/to/cudnn/lib/libcudnn.so -DCUDNN_INCLUDE_PATH=/path/to/cudnn/include"
python setup.py install

103
_sources/intro.rst.txt Normal file
View File

@ -0,0 +1,103 @@
Introduction
============
`kaldifeat`_ implements
speech feature extraction algorithms **compatible** with `Kaldi`_ using `PyTorch`_,
supporting CUDA as well as autograd.
`kaldifeat`_ has the following features:
- Fully compatible with `Kaldi`_
.. note::
The underlying C++ code is copied & modified from `Kaldi`_ directly.
It is rewritten with `PyTorch` C++ APIs.
- Provide not only ``C++ APIs`` but also ``Python APIs``
.. note::
You can access `kaldifeat`_ from ``Python``.
- Support autograd
- Support ``CUDA`` and ``CPU``
.. note::
You can use CUDA for feature extraction.
- Support ``online`` (i.e., ``streaming``) and ``offline`` (i.e., ``non-streaming``)
feature extraction
- Support chunk-based processing
.. note::
This is especially usefull if you want to process audios of several
hours long, which may cause OOM if you send them for computation at once.
With chunk-based processing, you can process audios of arbirtray length.
- Support batch processing
.. note::
With `kaldifeat`_ you can extract features for a batch of audios
.. see https://sublime-and-sphinx-guide.readthedocs.io/en/latest/tables.html
Currently implemented speech features and their counterparts in `Kaldi`_ are
listed in the following table.
.. list-table:: Supported speech features
:widths: 50 50
:header-rows: 1
* - Supported speech features
- Counterpart in `Kaldi`_
* - `kaldifeat.Fbank`_
- `compute-fbank-feats`_
* - `kaldifeat.Mfcc`_
- `compute-mfcc-feats`_
* - `kaldifeat.Plp`_
- `compute-plp-feats`_
* - `kaldifeat.Spectrogram`_
- `compute-spectrogram-feats`_
* - `kaldifeat.OnlineFbank`_
- `kaldi::OnlineFbank`_
* - `kaldifeat.OnlineMfcc`_
- `kaldi::OnlineMfcc`_
* - `kaldifeat.OnlinePlp`_
- `kaldi::OnlinePlp`_
Each feature computer needs an option. The following table lists the options
for each computer and the corresponding options in `Kaldi`_.
.. hint::
Note that we reuse the parameter names from `Kaldi`_.
Also, both online feature computers and offline feature computers share the
same option.
.. list-table:: Feature computer options
:widths: 50 50
:header-rows: 1
* - Options in `kaldifeat`_
- Corresponding options in `Kaldi`_
* - `kaldifeat.FbankOptions`_
- `kaldi::FbankOptions`_
* - `kaldifeat.MfccOptions`_
- `kaldi::MfccOptions`_
* - `kaldifeat.PlpOptions`_
- `kaldi::PlpOptions`_
* - `kaldifeat.SpectrogramOptions`_
- `kaldi::SpectrogramOptions`_
* - `kaldifeat.FrameExtractionOptions`_
- `kaldi::FrameExtractionOptions`_
* - `kaldifeat.MelBanksOptions`_
- `kaldi::MelBanksOptions`_
Read more to learn how to install `kaldifeat`_ and how to use each feature
computer.

View File

@ -0,0 +1,3 @@
kaldifeat.Fbank
===============

View File

@ -0,0 +1,52 @@
kaldifeat.FbankOptions
======================
If you want to construct an instance of `kaldifeat.Fbank`_ or
`kaldifeat.OnlineFbank`_, you have to provide an instance of
`kaldifeat.FbankOptions`_.
The following code shows how to construct an instance of `kaldifeat.FbankOptions`_.
.. literalinclude:: ./code/fbank_options-1.txt
:caption: Usage of `kaldifeat.FbankOptions`_
:emphasize-lines: 6,8,22,37
:language: python
Note that we reuse the same option name with `compute-fbank-feats`_ from `Kaldi`_:
.. code-block:: bash
$ compute-fbank-feats --help
.. literalinclude:: ./code/compute-fbank-feats-help.txt
:caption: Output of ``compute-fbank-feats --help``
Please refer to the output of ``compute-fbank-feats --help`` for the meaning
of each field of `kaldifeat.FbankOptions`_.
One thing worth noting is that `kaldifeat.FbankOptions`_ has a field ``device``,
which is an instance of ``torch.device``. You can assign it either a string, e.g.,
``"cpu"`` or ``"cuda:0"``, or an instance of ``torch.device``, e.g., ``torch.device("cpu")`` or
``torch.device("cuda", 1)``.
.. hint::
You can use this field to control whether the feature computer
constructed from it performs computation on CPU or CUDA.
.. caution::
If you use a CUDA device, make sure that you have installed a CUDA version
of `PyTorch`_.
Example usage
-------------
The following code from
`<https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/tests/test_fbank_options.py>`_
demonstrate the usage of `kaldifeat.FbankOptions`_:
.. literalinclude:: ./code/test_fbank_options.py
:caption: Example usage of `kaldifeat.FbankOptions`_
:language: python

View File

@ -0,0 +1,11 @@
Usage
=====
This section describes how to use feature computers in `kaldifeat`_.
.. toctree::
:maxdepth: 2
fbank_options
fbank
online_fbank

View File

@ -0,0 +1,3 @@
kaldifeat.OnlineFbank
=====================

View File

@ -0,0 +1,134 @@
/*
* _sphinx_javascript_frameworks_compat.js
* ~~~~~~~~~~
*
* Compatability shim for jQuery and underscores.js.
*
* WILL BE REMOVED IN Sphinx 6.0
* xref RemovedInSphinx60Warning
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}

928
_static/basic.css Normal file
View File

@ -0,0 +1,928 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
div.section::after {
display: block;
content: '';
clear: left;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox form.search {
overflow: hidden;
}
div.sphinxsidebar #searchbox input[type="text"] {
float: left;
width: 80%;
padding: 0.25em;
box-sizing: border-box;
}
div.sphinxsidebar #searchbox input[type="submit"] {
float: left;
width: 20%;
border-left: none;
padding: 0.25em;
box-sizing: border-box;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
ul.search li a {
font-weight: bold;
}
ul.search li p.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
margin-left: auto;
margin-right: auto;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable ul {
margin-top: 0;
margin-bottom: 0;
list-style-type: none;
}
table.indextable > tbody > tr > td > ul {
padding-left: 0em;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- domain module index --------------------------------------------------- */
table.modindextable td {
padding: 2px;
border-collapse: collapse;
}
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 360px;
max-width: 800px;
}
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
a.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, figure.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, figure.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, figure.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
img.align-default, figure.align-default, .figure.align-default {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-default {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar,
aside.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px;
background-color: #ffe;
width: 40%;
float: right;
clear: right;
overflow-x: auto;
}
p.sidebar-title {
font-weight: bold;
}
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
div.topic {
border: 1px solid #ccc;
padding: 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- content of sidebars/topics/admonitions -------------------------------- */
div.sidebar > :last-child,
aside.sidebar > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
}
div.sidebar::after,
aside.sidebar::after,
div.topic::after,
div.admonition::after,
blockquote::after {
display: block;
content: '';
clear: both;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
margin-top: 10px;
margin-bottom: 10px;
border: 0;
border-collapse: collapse;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
table.align-default {
margin-left: auto;
margin-right: auto;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
th > :first-child,
td > :first-child {
margin-top: 0px;
}
th > :last-child,
td > :last-child {
margin-bottom: 0px;
}
/* -- figures --------------------------------------------------------------- */
div.figure, figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption, figcaption {
padding: 0.3em;
}
div.figure p.caption span.caption-number,
figcaption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text,
figcaption span.caption-text {
}
/* -- field list styles ----------------------------------------------------- */
table.field-list td, table.field-list th {
border: 0 !important;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
/* -- hlist styles ---------------------------------------------------------- */
table.hlist {
margin: 1em 0;
}
table.hlist td {
vertical-align: top;
}
/* -- object description styles --------------------------------------------- */
.sig {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
}
.sig-name, code.descname {
background-color: transparent;
font-weight: bold;
}
.sig-name {
font-size: 1.1em;
}
code.descname {
font-size: 1.2em;
}
.sig-prename, code.descclassname {
background-color: transparent;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.sig-param.n {
font-style: italic;
}
/* C++ specific styling */
.sig-inline.c-texpr,
.sig-inline.cpp-texpr {
font-family: unset;
}
.sig.c .k, .sig.c .kt,
.sig.cpp .k, .sig.cpp .kt {
color: #0033B3;
}
.sig.c .m,
.sig.cpp .m {
color: #1750EB;
}
.sig.c .s, .sig.c .sc,
.sig.cpp .s, .sig.cpp .sc {
color: #067D17;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
:not(li) > ol > li:first-child > :first-child,
:not(li) > ul > li:first-child > :first-child {
margin-top: 0px;
}
:not(li) > ol > li:last-child > :last-child,
:not(li) > ul > li:last-child > :last-child {
margin-bottom: 0px;
}
ol.simple ol p,
ol.simple ul p,
ul.simple ol p,
ul.simple ul p {
margin-top: 0;
}
ol.simple > li:not(:first-child) > p,
ul.simple > li:not(:first-child) > p {
margin-top: 0;
}
ol.simple p,
ul.simple p {
margin-bottom: 0;
}
/* Docutils 0.17 and older (footnotes & citations) */
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
dl.footnote > dd:after,
dl.citation > dd:after {
content: "";
clear: both;
}
/* Docutils 0.18+ (footnotes & citations) */
aside.footnote > span,
div.citation > span {
float: left;
}
aside.footnote > span:last-of-type,
div.citation > span:last-of-type {
padding-right: 0.5em;
}
aside.footnote > p {
margin-left: 2em;
}
div.citation > p {
margin-left: 4em;
}
aside.footnote > p:last-of-type,
div.citation > p:last-of-type {
margin-bottom: 0em;
}
aside.footnote > p:last-of-type:after,
div.citation > p:last-of-type:after {
content: "";
clear: both;
}
/* Footnotes & citations ends */
dl.field-list {
display: grid;
grid-template-columns: fit-content(30%) auto;
}
dl.field-list > dt {
font-weight: bold;
word-break: break-word;
padding-left: 0.5em;
padding-right: 5px;
}
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
margin-left: 0em;
margin-bottom: 0em;
}
dl {
margin-bottom: 15px;
}
dd > :first-child {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
dl > dd:last-child,
dl > dd:last-child > :last-child {
margin-bottom: 0;
}
dt:target, span.highlighted {
background-color: #fbe54e;
}
rect.highlighted {
fill: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
.classifier:before {
font-style: normal;
margin: 0 0.5em;
content: ":";
display: inline-block;
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
pre, div[class*="highlight-"] {
clear: both;
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
white-space: nowrap;
}
div[class*="highlight-"] {
margin: 1em 0;
}
td.linenos pre {
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
display: block;
}
table.highlighttable tbody {
display: block;
}
table.highlighttable tr {
display: flex;
}
table.highlighttable td {
margin: 0;
padding: 0;
}
table.highlighttable td.linenos {
padding-right: 0.5em;
}
table.highlighttable td.code {
flex: 1;
overflow: hidden;
}
.highlight .hll {
display: block;
}
div.highlight pre,
table.highlighttable pre {
margin: 0;
}
div.code-block-caption + div {
margin-top: 0;
}
div.code-block-caption {
margin-top: 1em;
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
table.highlighttable td.linenos,
span.linenos,
div.highlight span.gp { /* gp: Generic.Prompt */
user-select: none;
-webkit-user-select: text; /* Safari fallback only */
-webkit-user-select: none; /* Chrome/Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+ */
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
margin: 1em 0;
}
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
span.eqno a.headerlink {
position: absolute;
z-index: 1;
}
div.math:hover a.headerlink {
visibility: visible;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}

View File

@ -0,0 +1 @@
.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

4
_static/css/theme.css Normal file

File diff suppressed because one or more lines are too long

264
_static/doctools.js Normal file
View File

@ -0,0 +1,264 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Base JavaScript utilities for all Sphinx HTML documentation.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
}
};
/**
* highlight a given string on a node by wrapping it in
* span elements with the given class name.
*/
const _highlight = (node, addItems, text, className) => {
if (node.nodeType === Node.TEXT_NODE) {
const val = node.nodeValue;
const parent = node.parentNode;
const pos = val.toLowerCase().indexOf(text);
if (
pos >= 0 &&
!parent.classList.contains(className) &&
!parent.classList.contains("nohighlight")
) {
let span;
const closestNode = parent.closest("body, svg, foreignObject");
const isInSVG = closestNode && closestNode.matches("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.classList.add(className);
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
const rect = document.createElementNS(
"http://www.w3.org/2000/svg",
"rect"
);
const bbox = parent.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute("class", className);
addItems.push({ parent: parent, target: rect });
}
}
} else if (node.matches && !node.matches("button, select, textarea")) {
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
}
};
const _highlightText = (thisNode, text, className) => {
let addItems = [];
_highlight(thisNode, addItems, text, className);
addItems.forEach((obj) =>
obj.parent.insertAdjacentElement("beforebegin", obj.target)
);
};
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.highlightSearchWords();
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
},
/**
* i18n support
*/
TRANSLATIONS: {},
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
LOCALE: "unknown",
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext: (string) => {
const translated = Documentation.TRANSLATIONS[string];
switch (typeof translated) {
case "undefined":
return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
}
},
ngettext: (singular, plural, n) => {
const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated !== "undefined")
return translated[Documentation.PLURAL_EXPR(n)];
return n === 1 ? singular : plural;
},
addTranslations: (catalog) => {
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
Documentation.PLURAL_EXPR = new Function(
"n",
`return (${catalog.plural_expr})`
);
Documentation.LOCALE = catalog.locale;
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords: () => {
const highlight =
new URLSearchParams(window.location.search).get("highlight") || "";
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
if (terms.length === 0) return; // nothing to do
// There should never be more than one element matching "div.body"
const divBody = document.querySelectorAll("div.body");
const body = divBody.length ? divBody[0] : document.querySelector("body");
window.setTimeout(() => {
terms.forEach((term) => _highlightText(body, term, "highlighted"));
}, 10);
const searchBox = document.getElementById("searchbox");
if (searchBox === null) return;
searchBox.appendChild(
document
.createRange()
.createContextualFragment(
'<p class="highlight-link">' +
'<a href="javascript:Documentation.hideSearchWords()">' +
Documentation.gettext("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* helper function to hide the search marks again
*/
hideSearchWords: () => {
document
.querySelectorAll("#searchbox .highlight-link")
.forEach((el) => el.remove());
document
.querySelectorAll("span.highlighted")
.forEach((el) => el.classList.remove("highlighted"));
const url = new URL(window.location);
url.searchParams.delete("highlight");
window.history.replaceState({}, "", url);
},
/**
* helper function to focus on search bar
*/
focusSearchBar: () => {
document.querySelectorAll("input[name=q]")[0]?.focus();
},
/**
* Initialise the domain index toggle buttons
*/
initDomainIndexTable: () => {
const toggler = (el) => {
const idNumber = el.id.substr(7);
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (el.src.substr(-9) === "minus.png") {
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
toggledRows.forEach((el) => (el.style.display = "none"));
} else {
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
},
initOnKeyListeners: () => {
// only install a listener if it is really needed
if (
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
)
return;
const blacklistedElements = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
document.addEventListener("keydown", (event) => {
if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements
if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys
if (!event.shiftKey) {
switch (event.key) {
case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const prevLink = document.querySelector('link[rel="prev"]');
if (prevLink && prevLink.href) {
window.location.href = prevLink.href;
event.preventDefault();
}
break;
case "ArrowRight":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const nextLink = document.querySelector('link[rel="next"]');
if (nextLink && nextLink.href) {
window.location.href = nextLink.href;
event.preventDefault();
}
break;
case "Escape":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.hideSearchWords();
event.preventDefault();
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.focusSearchBar();
event.preventDefault();
}
});
},
};
// quick alias for translations
const _ = Documentation.gettext;
_ready(Documentation.init);

View File

@ -0,0 +1,14 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '1.16',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
BUILDER: 'html',
FILE_SUFFIX: '.html',
LINK_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false,
SHOW_SEARCH_SUMMARY: true,
ENABLE_SEARCH_SHORTCUTS: false,
};

BIN
_static/file.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

10881
_static/jquery-3.6.0.js vendored Normal file

File diff suppressed because it is too large Load Diff

2
_static/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

1
_static/js/badge_only.js Normal file
View File

@ -0,0 +1 @@
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});

4
_static/js/html5shiv-printshiv.min.js vendored Normal file
View File

@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);

4
_static/js/html5shiv.min.js vendored Normal file
View File

@ -0,0 +1,4 @@
/**
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);

1
_static/js/theme.js Normal file

File diff suppressed because one or more lines are too long

199
_static/language_data.js Normal file
View File

@ -0,0 +1,199 @@
/*
* language_data.js
* ~~~~~~~~~~~~~~~~
*
* This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
/* Non-minified version is copied as a separate JS file, is available */
/**
* Porter Stemmer
*/
var Stemmer = function() {
var step2list = {
ational: 'ate',
tional: 'tion',
enci: 'ence',
anci: 'ance',
izer: 'ize',
bli: 'ble',
alli: 'al',
entli: 'ent',
eli: 'e',
ousli: 'ous',
ization: 'ize',
ation: 'ate',
ator: 'ate',
alism: 'al',
iveness: 'ive',
fulness: 'ful',
ousness: 'ous',
aliti: 'al',
iviti: 'ive',
biliti: 'ble',
logi: 'log'
};
var step3list = {
icate: 'ic',
ative: '',
alize: 'al',
iciti: 'ic',
ical: 'ic',
ful: '',
ness: ''
};
var c = "[^aeiou]"; // consonant
var v = "[aeiouy]"; // vowel
var C = c + "[^aeiouy]*"; // consonant sequence
var V = v + "[aeiou]*"; // vowel sequence
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
var s_v = "^(" + C + ")?" + v; // vowel in stem
this.stemWord = function (w) {
var stem;
var suffix;
var firstch;
var origword = w;
if (w.length < 3)
return w;
var re;
var re2;
var re3;
var re4;
firstch = w.substr(0,1);
if (firstch == "y")
w = firstch.toUpperCase() + w.substr(1);
// Step 1a
re = /^(.+?)(ss|i)es$/;
re2 = /^(.+?)([^s])s$/;
if (re.test(w))
w = w.replace(re,"$1$2");
else if (re2.test(w))
w = w.replace(re2,"$1$2");
// Step 1b
re = /^(.+?)eed$/;
re2 = /^(.+?)(ed|ing)$/;
if (re.test(w)) {
var fp = re.exec(w);
re = new RegExp(mgr0);
if (re.test(fp[1])) {
re = /.$/;
w = w.replace(re,"");
}
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1];
re2 = new RegExp(s_v);
if (re2.test(stem)) {
w = stem;
re2 = /(at|bl|iz)$/;
re3 = new RegExp("([^aeiouylsz])\\1$");
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re2.test(w))
w = w + "e";
else if (re3.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
else if (re4.test(w))
w = w + "e";
}
}
// Step 1c
re = /^(.+?)y$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(s_v);
if (re.test(stem))
w = stem + "i";
}
// Step 2
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step2list[suffix];
}
// Step 3
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step3list[suffix];
}
// Step 4
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
re2 = /^(.+?)(s|t)(ion)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
if (re.test(stem))
w = stem;
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1] + fp[2];
re2 = new RegExp(mgr1);
if (re2.test(stem))
w = stem;
}
// Step 5
re = /^(.+?)e$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
re2 = new RegExp(meq1);
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
w = stem;
}
re = /ll$/;
re2 = new RegExp(mgr1);
if (re.test(w) && re2.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
// and turn initial Y back to y
if (firstch == "y")
w = firstch.toLowerCase() + w.substr(1);
return w;
}
}

BIN
_static/minus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

BIN
_static/plus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

74
_static/pygments.css Normal file
View File

@ -0,0 +1,74 @@
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #eeffcc; }
.highlight .c { color: #408090; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #007020 } /* Comment.Preproc */
.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #333333 } /* Generic.Output */
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #902000 } /* Keyword.Type */
.highlight .m { color: #208050 } /* Literal.Number */
.highlight .s { color: #4070a0 } /* Literal.String */
.highlight .na { color: #4070a0 } /* Name.Attribute */
.highlight .nb { color: #007020 } /* Name.Builtin */
.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
.highlight .no { color: #60add5 } /* Name.Constant */
.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #007020 } /* Name.Exception */
.highlight .nf { color: #06287e } /* Name.Function */
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #bb60d5 } /* Name.Variable */
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #208050 } /* Literal.Number.Bin */
.highlight .mf { color: #208050 } /* Literal.Number.Float */
.highlight .mh { color: #208050 } /* Literal.Number.Hex */
.highlight .mi { color: #208050 } /* Literal.Number.Integer */
.highlight .mo { color: #208050 } /* Literal.Number.Oct */
.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
.highlight .sc { color: #4070a0 } /* Literal.String.Char */
.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
.highlight .sx { color: #c65d09 } /* Literal.String.Other */
.highlight .sr { color: #235388 } /* Literal.String.Regex */
.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #06287e } /* Name.Function.Magic */
.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */

531
_static/searchtools.js Normal file
View File

@ -0,0 +1,531 @@
/*
* searchtools.js
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
/**
* Simple result scoring code.
*/
if (typeof Scorer === "undefined") {
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [docname, title, anchor, descr, score, filename]
// and returns the new score.
/*
score: result => {
const [docname, title, anchor, descr, score, filename] = result
return score
},
*/
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {
0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5, // used to be unimportantResults
},
// Used when the priority is not in the mapping.
objPrioDefault: 0,
// query found in title
title: 15,
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2,
};
}
const _removeChildren = (element) => {
while (element && element.lastChild) element.removeChild(element.lastChild);
};
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
*/
const _escapeRegExp = (string) =>
string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
const _displayItem = (item, highlightTerms, searchTerms) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const [docName, title, anchor, descr] = item;
let listItem = document.createElement("li");
let requestUrl;
let linkUrl;
if (docBuilder === "dirhtml") {
// dirhtml builder
let dirname = docName + "/";
if (dirname.match(/\/index\/$/))
dirname = dirname.substring(0, dirname.length - 6);
else if (dirname === "index/") dirname = "";
requestUrl = docUrlRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = docUrlRoot + docName + docFileSuffix;
linkUrl = docName + docLinkSuffix;
}
const params = new URLSearchParams();
params.set("highlight", [...highlightTerms].join(" "));
let linkEl = listItem.appendChild(document.createElement("a"));
linkEl.href = linkUrl + "?" + params.toString() + anchor;
linkEl.innerHTML = title;
if (descr)
listItem.appendChild(document.createElement("span")).innerText =
" (" + descr + ")";
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms, highlightTerms)
);
});
Search.output.appendChild(listItem);
};
const _finishSearch = (resultCount) => {
Search.stopPulse();
Search.title.innerText = _("Search Results");
if (!resultCount)
Search.status.innerText = Documentation.gettext(
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
);
else
Search.status.innerText = _(
`Search finished, found ${resultCount} page(s) matching the search query.`
);
};
const _displayNextItem = (
results,
resultCount,
highlightTerms,
searchTerms
) => {
// results left, load the summary and display it
// this is intended to be dynamic (don't sub resultsCount)
if (results.length) {
_displayItem(results.pop(), highlightTerms, searchTerms);
setTimeout(
() => _displayNextItem(results, resultCount, highlightTerms, searchTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
/**
* Default splitQuery function. Can be overridden in ``sphinx.search`` with a
* custom function per language.
*
* The regular expression works by splitting the string on consecutive characters
* that are not Unicode letters, numbers, underscores, or emoji characters.
* This is the same as ``\W+`` in Python, preserving the surrogate pair area.
*/
if (typeof splitQuery === "undefined") {
var splitQuery = (query) => query
.split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
.filter(term => term) // remove remaining empty strings
}
/**
* Search Module
*/
const Search = {
_index: null,
_queued_query: null,
_pulse_status: -1,
htmlToText: (htmlString) => {
const htmlElement = document
.createRange()
.createContextualFragment(htmlString);
_removeChildren(htmlElement.querySelectorAll(".headerlink"));
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent !== undefined) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template."
);
return "";
},
init: () => {
const query = new URLSearchParams(window.location.search).get("q");
document
.querySelectorAll('input[name="q"]')
.forEach((el) => (el.value = query));
if (query) Search.performSearch(query);
},
loadIndex: (url) =>
(document.body.appendChild(document.createElement("script")).src = url),
setIndex: (index) => {
Search._index = index;
if (Search._queued_query !== null) {
const query = Search._queued_query;
Search._queued_query = null;
Search.query(query);
}
},
hasIndex: () => Search._index !== null,
deferQuery: (query) => (Search._queued_query = query),
stopPulse: () => (Search._pulse_status = -1),
startPulse: () => {
if (Search._pulse_status >= 0) return;
const pulse = () => {
Search._pulse_status = (Search._pulse_status + 1) % 4;
Search.dots.innerText = ".".repeat(Search._pulse_status);
if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
};
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch: (query) => {
// create the required interface elements
const searchText = document.createElement("h2");
searchText.textContent = _("Searching");
const searchSummary = document.createElement("p");
searchSummary.classList.add("search-summary");
searchSummary.innerText = "";
const searchList = document.createElement("ul");
searchList.classList.add("search");
const out = document.getElementById("search-results");
Search.title = out.appendChild(searchText);
Search.dots = Search.title.appendChild(document.createElement("span"));
Search.status = out.appendChild(searchSummary);
Search.output = out.appendChild(searchList);
const searchProgress = document.getElementById("search-progress");
// Some themes don't use the search progress node
if (searchProgress) {
searchProgress.innerText = _("Preparing search...");
}
Search.startPulse();
// index already loaded, the browser was quick!
if (Search.hasIndex()) Search.query(query);
else Search.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query: (query) => {
// stem the search terms and add them to the correct list
const stemmer = new Stemmer();
const searchTerms = new Set();
const excludedTerms = new Set();
const highlightTerms = new Set();
const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
splitQuery(query.trim()).forEach((queryTerm) => {
const queryTermLower = queryTerm.toLowerCase();
// maybe skip this "word"
// stopwords array is from language_data.js
if (
stopwords.indexOf(queryTermLower) !== -1 ||
queryTerm.match(/^\d+$/)
)
return;
// stem the word
let word = stemmer.stemWord(queryTermLower);
// select the correct list
if (word[0] === "-") excludedTerms.add(word.substr(1));
else {
searchTerms.add(word);
highlightTerms.add(queryTermLower);
}
});
// console.debug("SEARCH: searching for:");
// console.info("required: ", [...searchTerms]);
// console.info("excluded: ", [...excludedTerms]);
// array of [docname, title, anchor, descr, score, filename]
let results = [];
_removeChildren(document.getElementById("search-progress"));
// lookup as object
objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms))
);
// lookup as search terms in fulltext
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort((a, b) => {
const leftScore = a[4];
const rightScore = b[4];
if (leftScore === rightScore) {
// same score: sort alphabetically
const leftTitle = a[1].toLowerCase();
const rightTitle = b[1].toLowerCase();
if (leftTitle === rightTitle) return 0;
return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
}
return leftScore > rightScore ? 1 : -1;
});
// remove duplicate search results
// note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
let seen = new Set();
results = results.reverse().reduce((acc, result) => {
let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
if (!seen.has(resultStr)) {
acc.push(result);
seen.add(resultStr);
}
return acc;
}, []);
results = results.reverse();
// for debugging
//Search.lastresults = results.slice(); // a copy
// console.info("search results:", Search.lastresults);
// print the results
_displayNextItem(results, results.length, highlightTerms, searchTerms);
},
/**
* search for object names
*/
performObjectSearch: (object, objectTerms) => {
const filenames = Search._index.filenames;
const docNames = Search._index.docnames;
const objects = Search._index.objects;
const objNames = Search._index.objnames;
const titles = Search._index.titles;
const results = [];
const objectSearchCallback = (prefix, match) => {
const name = match[4]
const fullname = (prefix ? prefix + "." : "") + name;
const fullnameLower = fullname.toLowerCase();
if (fullnameLower.indexOf(object) < 0) return;
let score = 0;
const parts = fullnameLower.split(".");
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower === object || parts.slice(-1)[0] === object)
score += Scorer.objNameMatch;
else if (parts.slice(-1)[0].indexOf(object) > -1)
score += Scorer.objPartialMatch; // matches in last name
const objName = objNames[match[1]][2];
const title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
const otherTerms = new Set(objectTerms);
otherTerms.delete(object);
if (otherTerms.size > 0) {
const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
if (
[...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
)
return;
}
let anchor = match[3];
if (anchor === "") anchor = fullname;
else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
const descr = objName + _(", in ") + title;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2]))
score += Scorer.objPrio[match[2]];
else score += Scorer.objPrioDefault;
results.push([
docNames[match[0]],
fullname,
"#" + anchor,
descr,
score,
filenames[match[0]],
]);
};
Object.keys(objects).forEach((prefix) =>
objects[prefix].forEach((array) =>
objectSearchCallback(prefix, array)
)
);
return results;
},
/**
* search for full-text terms in the index
*/
performTermsSearch: (searchTerms, excludedTerms) => {
// prepare search
const terms = Search._index.terms;
const titleTerms = Search._index.titleterms;
const docNames = Search._index.docnames;
const filenames = Search._index.filenames;
const titles = Search._index.titles;
const scoreMap = new Map();
const fileMap = new Map();
// perform the search on the required terms
searchTerms.forEach((word) => {
const files = [];
const arr = [
{ files: terms[word], score: Scorer.term },
{ files: titleTerms[word], score: Scorer.title },
];
// add support for partial matches
if (word.length > 2) {
const escapedWord = _escapeRegExp(word);
Object.keys(terms).forEach((term) => {
if (term.match(escapedWord) && !terms[word])
arr.push({ files: terms[term], score: Scorer.partialTerm });
});
Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord) && !titleTerms[word])
arr.push({ files: titleTerms[word], score: Scorer.partialTitle });
});
}
// no match but word was a required one
if (arr.every((record) => record.files === undefined)) return;
// found search word in contents
arr.forEach((record) => {
if (record.files === undefined) return;
let recordFiles = record.files;
if (recordFiles.length === undefined) recordFiles = [recordFiles];
files.push(...recordFiles);
// set score for the word in each file
recordFiles.forEach((file) => {
if (!scoreMap.has(file)) scoreMap.set(file, {});
scoreMap.get(file)[word] = record.score;
});
});
// create the mapping
files.forEach((file) => {
if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
fileMap.get(file).push(word);
else fileMap.set(file, [word]);
});
});
// now check if the files don't contain excluded terms
const results = [];
for (const [file, wordList] of fileMap) {
// check if all requirements are matched
// as search terms with length < 3 are discarded
const filteredTermCount = [...searchTerms].filter(
(term) => term.length > 2
).length;
if (
wordList.length !== searchTerms.size &&
wordList.length !== filteredTermCount
)
continue;
// ensure that none of the excluded terms is in the search result
if (
[...excludedTerms].some(
(term) =>
terms[term] === file ||
titleTerms[term] === file ||
(terms[term] || []).includes(file) ||
(titleTerms[term] || []).includes(file)
)
)
break;
// select one (max) score for the file.
const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
// add result to the result list
results.push([
docNames[file],
titles[file],
"",
null,
score,
filenames[file],
]);
}
return results;
},
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words, highlightWords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary: (htmlText, keywords, highlightWords) => {
const text = Search.htmlToText(htmlText).toLowerCase();
if (text === "") return null;
const actualStartPosition = [...keywords]
.map((k) => text.indexOf(k.toLowerCase()))
.filter((i) => i > -1)
.slice(-1)[0];
const startWithContext = Math.max(actualStartPosition - 120, 0);
const top = startWithContext === 0 ? "" : "...";
const tail = startWithContext + 240 < text.length ? "..." : "";
let summary = document.createElement("div");
summary.classList.add("context");
summary.innerText = top + text.substr(startWithContext, 240).trim() + tail;
highlightWords.forEach((highlightWord) =>
_highlightText(summary, highlightWord, "highlighted")
);
return summary;
},
};
_ready(Search.init);

2042
_static/underscore-1.13.1.js Normal file

File diff suppressed because it is too large Load Diff

6
_static/underscore.js Normal file

File diff suppressed because one or more lines are too long

107
genindex.html Normal file
View File

@ -0,0 +1,107 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Index &mdash; kaldifeat 1.16 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> kaldifeat
</a>
<div class="version">
1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/index.html">Usage</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">kaldifeat</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content style-external-links">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li>Index</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/docs/source/genindex" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2021, Fangjun Kuang.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

127
index.html Normal file
View File

@ -0,0 +1,127 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>kaldifeat &mdash; kaldifeat 1.16 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Introduction" href="intro.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="#" class="icon icon-home"> kaldifeat
</a>
<div class="version">
1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/index.html">Usage</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="#">kaldifeat</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content style-external-links">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="#" class="icon icon-home"></a> &raquo;</li>
<li>kaldifeat</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/docs/source/index.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="kaldifeat">
<h1>kaldifeat<a class="headerlink" href="#kaldifeat" title="Permalink to this heading"></a></h1>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="installation.html#install-kaldifeat-from-source">Install kaldifeat from source</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation.html#install-kaldifeat-from-pypi">Install kaldifeat from PyPI</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation.html#install-kaldifeat-from-conda-only-for-linux">Install kaldifeat from conda (Only for Linux)</a></li>
<li class="toctree-l2"><a class="reference internal" href="installation.html#faqs">FAQs</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="usage/index.html">Usage</a><ul>
<li class="toctree-l2"><a class="reference internal" href="usage/fbank_options.html">kaldifeat.FbankOptions</a></li>
<li class="toctree-l2"><a class="reference internal" href="usage/fbank.html">kaldifeat.Fbank</a></li>
<li class="toctree-l2"><a class="reference internal" href="usage/online_fbank.html">kaldifeat.OnlineFbank</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="intro.html" class="btn btn-neutral float-right" title="Introduction" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2021, Fangjun Kuang.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

248
installation.html Normal file
View File

@ -0,0 +1,248 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Installation &mdash; kaldifeat 1.16 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Usage" href="usage/index.html" />
<link rel="prev" title="Introduction" href="intro.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> kaldifeat
</a>
<div class="version">
1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Installation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#install-kaldifeat-from-source">Install kaldifeat from source</a></li>
<li class="toctree-l2"><a class="reference internal" href="#install-kaldifeat-from-pypi">Install kaldifeat from PyPI</a></li>
<li class="toctree-l2"><a class="reference internal" href="#install-kaldifeat-from-conda-only-for-linux">Install kaldifeat from conda (Only for Linux)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#faqs">FAQs</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#how-to-install-a-cuda-version-of-kaldifeat">How to install a CUDA version of kaldifeat</a></li>
<li class="toctree-l3"><a class="reference internal" href="#how-to-install-a-cpu-version-of-kaldifeat">How to install a CPU version of kaldifeat</a></li>
<li class="toctree-l3"><a class="reference internal" href="#how-to-fix-caffe2-cannot-find-cudnn-library">How to fix <cite>Caffe2: Cannot find cuDNN library</cite></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="usage/index.html">Usage</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">kaldifeat</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content style-external-links">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li>Installation</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/docs/source/installation.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="installation">
<h1>Installation<a class="headerlink" href="#installation" title="Permalink to this heading"></a></h1>
<blockquote>
<div><ul class="simple">
<li><p><img alt="Supported operating systems" src="_images/os-green.svg" /></p></li>
<li><p><img alt="Supported python versions" src="_images/python_ge_3.6-blue.svg" /></p></li>
<li><p><img alt="Supported pytorch versions" src="_images/pytorch_ge_1.5.0-green.svg" /></p></li>
<li><p><img alt="Supported cuda versions" src="_images/cuda_ge_10.1-orange.svg" /></p></li>
</ul>
</div></blockquote>
<div class="admonition caution">
<p class="admonition-title">Caution</p>
<p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a> depends on <a class="reference external" href="https://pytorch.org/">PyTorch</a>. <a class="reference external" href="https://pytorch.org/">PyTorch</a> &gt;= 1.5.0 is known to work.</p>
<p>Please first install <a class="reference external" href="https://pytorch.org/">PyTorch</a> before you install <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a>.</p>
</div>
<div class="admonition hint">
<p class="admonition-title">Hint</p>
<p>To install a CPU version of <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a>, please install a CPU version
of <a class="reference external" href="https://pytorch.org/">PyTorch</a>.</p>
<p>To install a CUDA version of <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a>, please install a CUDA version
of <a class="reference external" href="https://pytorch.org/">PyTorch</a>. CUDA &gt;= 10.1 is known to work.</p>
</div>
<section id="install-kaldifeat-from-source">
<span id="from-source"></span><h2>Install kaldifeat from source<a class="headerlink" href="#install-kaldifeat-from-source" title="Permalink to this heading"></a></h2>
<p>You have to install <code class="docutils literal notranslate"><span class="pre">cmake</span></code> and <a class="reference external" href="https://pytorch.org/">PyTorch</a> first.</p>
<blockquote>
<div><ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">cmake</span></code> 3.11 is known to work. Other CMake versions may also work.</p></li>
<li><p><a class="reference external" href="https://pytorch.org/">PyTorch</a> &gt;= 1.5.0 is known to work. Other PyTorch versions may also work.</p></li>
<li><p>Python &gt;= 3.6</p></li>
</ul>
</div></blockquote>
<p>The commands to install <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a> from source are:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>git clone https://github.com/csukuangfj/kaldifeat
<span class="nb">cd</span> kaldifeat
python3 setup.py install
</pre></div>
</div>
<p>To test that you have installed <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a> successfully, please run:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>python3 -c <span class="s2">&quot;import kaldifeat; print(kaldifeat.__version__)&quot;</span>
</pre></div>
</div>
<p>It should print the version, e.g., <code class="docutils literal notranslate"><span class="pre">1.0</span></code>.</p>
</section>
<section id="install-kaldifeat-from-pypi">
<span id="from-pypi"></span><h2>Install kaldifeat from PyPI<a class="headerlink" href="#install-kaldifeat-from-pypi" title="Permalink to this heading"></a></h2>
<p>The command to install <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a> from PyPI is:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>pip install --verbose kaldifeat
</pre></div>
</div>
<p>To test that you have installed <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a> successfully, please run:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>python3 -c <span class="s2">&quot;import kaldifeat; print(kaldifeat.__version__)&quot;</span>
</pre></div>
</div>
<p>It should print the version, e.g., <code class="docutils literal notranslate"><span class="pre">1.0</span></code>.</p>
</section>
<section id="install-kaldifeat-from-conda-only-for-linux">
<h2>Install kaldifeat from conda (Only for Linux)<a class="headerlink" href="#install-kaldifeat-from-conda-only-for-linux" title="Permalink to this heading"></a></h2>
<div class="admonition hint">
<p class="admonition-title">Hint</p>
<p>Installation using <code class="docutils literal notranslate"><span class="pre">conda</span></code> supports only Linux. For macOS and Windows,
please use either <a class="reference internal" href="#from-source"><span class="std std-ref">Install kaldifeat from source</span></a> or <a class="reference internal" href="#from-pypi"><span class="std std-ref">Install kaldifeat from PyPI</span></a>.</p>
</div>
<p>The command to install <cite>kaldifeat</cite> using <code class="docutils literal notranslate"><span class="pre">conda</span></code> is</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>conda install -c kaldifeat -c pytorch -c conda-forge kaldifeat <span class="nv">python</span><span class="o">=</span><span class="m">3</span>.8 <span class="nv">cudatoolkit</span><span class="o">=</span><span class="m">11</span>.1 <span class="nv">pytorch</span><span class="o">=</span><span class="m">1</span>.8.1
</pre></div>
</div>
<p>You can select the supported Python version, CUDA toolkit version and <a class="reference external" href="https://pytorch.org/">PyTorch</a> version as you wish.</p>
<p>To install a CPU version of <cite>kaldifeat</cite>, use:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>conda install -c kaldifeat -c pytorch cpuonly kaldifeat <span class="nv">python</span><span class="o">=</span><span class="m">3</span>.8 <span class="nv">pytorch</span><span class="o">=</span><span class="m">1</span>.8.1
</pre></div>
</div>
<div class="admonition caution">
<p class="admonition-title">Caution</p>
<p>If you encounter issues about missing GLIBC after installing <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a>
with <code class="docutils literal notranslate"><span class="pre">conda</span></code>, please consider <a class="reference internal" href="#from-source"><span class="std std-ref">Install kaldifeat from source</span></a> or <a class="reference internal" href="#from-pypi"><span class="std std-ref">Install kaldifeat from PyPI</span></a>.
The reason is that the package was built using Ubuntu 18.04 and your systems
GLIBC is older.</p>
</div>
<p>To test that you have installed <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a> successfully, please run:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>python3 -c <span class="s2">&quot;import kaldifeat; print(kaldifeat.__version__)&quot;</span>
</pre></div>
</div>
<p>It should print the version, e.g., <code class="docutils literal notranslate"><span class="pre">1.0</span></code>.</p>
</section>
<section id="faqs">
<h2>FAQs<a class="headerlink" href="#faqs" title="Permalink to this heading"></a></h2>
<section id="how-to-install-a-cuda-version-of-kaldifeat">
<h3>How to install a CUDA version of kaldifeat<a class="headerlink" href="#how-to-install-a-cuda-version-of-kaldifeat" title="Permalink to this heading"></a></h3>
<p>You need to first install a CUDA version of <a class="reference external" href="https://pytorch.org/">PyTorch</a> and then install <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a>.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>You can use a CUDA version of <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a> on machines with no GPUs.</p>
</div>
</section>
<section id="how-to-install-a-cpu-version-of-kaldifeat">
<h3>How to install a CPU version of kaldifeat<a class="headerlink" href="#how-to-install-a-cpu-version-of-kaldifeat" title="Permalink to this heading"></a></h3>
<p>You need to first install a CPU version of <a class="reference external" href="https://pytorch.org/">PyTorch</a> and then install <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a>.</p>
</section>
<section id="how-to-fix-caffe2-cannot-find-cudnn-library">
<h3>How to fix <cite>Caffe2: Cannot find cuDNN library</cite><a class="headerlink" href="#how-to-fix-caffe2-cannot-find-cudnn-library" title="Permalink to this heading"></a></h3>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Your</span> <span class="n">installed</span> <span class="n">Caffe2</span> <span class="n">version</span> <span class="n">uses</span> <span class="n">cuDNN</span> <span class="n">but</span> <span class="n">I</span> <span class="n">cannot</span> <span class="n">find</span> <span class="n">the</span> <span class="n">cuDNN</span>
<span class="n">libraries</span><span class="o">.</span> <span class="n">Please</span> <span class="nb">set</span> <span class="n">the</span> <span class="n">proper</span> <span class="n">cuDNN</span> <span class="n">prefixes</span> <span class="ow">and</span> <span class="o">/</span> <span class="ow">or</span> <span class="n">install</span> <span class="n">cuDNN</span><span class="o">.</span>
</pre></div>
</div>
<p>You will have such an error when you want to install a CUDA version of <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a>
by <code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">kaldifeat</span></code> or from source.</p>
<p>You need to first install cuDNN. Assume you have installed cuDNN to the
path <code class="docutils literal notranslate"><span class="pre">/path/to/cudnn</span></code>. You can fix the error by using <code class="docutils literal notranslate"><span class="pre">one</span></code> of the following
commands.</p>
<ol class="arabic simple">
<li><p>Fix for installation using <code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span></code></p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span> <span class="nv">KALDIFEAT_CMAKE_ARGS</span><span class="o">=</span><span class="s2">&quot;-DCMAKE_BUILD_TYPE=Release -DCUDNN_LIBRARY_PATH=/path/to/cudnn/lib/libcudnn.so -DCUDNN_INCLUDE_PATH=/path/to/cudnn/include&quot;</span>
pip install --verbose kaldifeat
</pre></div>
</div>
<ol class="arabic simple" start="2">
<li><p>Fix for installation from source</p></li>
</ol>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mkdir /some/path
git clone https://github.com/csukuangfj/kaldifeat.git
<span class="nb">cd</span> kaldifeat
<span class="nb">export</span> <span class="nv">KALDIFEAT_CMAKE_ARGS</span><span class="o">=</span><span class="s2">&quot;-DCMAKE_BUILD_TYPE=Release -DCUDNN_LIBRARY_PATH=/path/to/cudnn/lib/libcudnn.so -DCUDNN_INCLUDE_PATH=/path/to/cudnn/include&quot;</span>
python setup.py install
</pre></div>
</div>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="intro.html" class="btn btn-neutral float-left" title="Introduction" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="usage/index.html" class="btn btn-neutral float-right" title="Usage" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2021, Fangjun Kuang.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

233
intro.html Normal file
View File

@ -0,0 +1,233 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Introduction &mdash; kaldifeat 1.16 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Installation" href="installation.html" />
<link rel="prev" title="kaldifeat" href="index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> kaldifeat
</a>
<div class="version">
1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/index.html">Usage</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">kaldifeat</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content style-external-links">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li>Introduction</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/docs/source/intro.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="introduction">
<h1>Introduction<a class="headerlink" href="#introduction" title="Permalink to this heading"></a></h1>
<p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a> implements
speech feature extraction algorithms <strong>compatible</strong> with <a class="reference external" href="https://github.com/kaldi-asr/kaldi">Kaldi</a> using <a class="reference external" href="https://pytorch.org/">PyTorch</a>,
supporting CUDA as well as autograd.</p>
<p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a> has the following features:</p>
<blockquote>
<div><ul>
<li><p>Fully compatible with <a class="reference external" href="https://github.com/kaldi-asr/kaldi">Kaldi</a></p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The underlying C++ code is copied &amp; modified from <a class="reference external" href="https://github.com/kaldi-asr/kaldi">Kaldi</a> directly.
It is rewritten with <cite>PyTorch</cite> C++ APIs.</p>
</div>
</li>
<li><p>Provide not only <code class="docutils literal notranslate"><span class="pre">C++</span> <span class="pre">APIs</span></code> but also <code class="docutils literal notranslate"><span class="pre">Python</span> <span class="pre">APIs</span></code></p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>You can access <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a> from <code class="docutils literal notranslate"><span class="pre">Python</span></code>.</p>
</div>
</li>
<li><p>Support autograd</p></li>
<li><p>Support <code class="docutils literal notranslate"><span class="pre">CUDA</span></code> and <code class="docutils literal notranslate"><span class="pre">CPU</span></code></p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>You can use CUDA for feature extraction.</p>
</div>
</li>
<li><p>Support <code class="docutils literal notranslate"><span class="pre">online</span></code> (i.e., <code class="docutils literal notranslate"><span class="pre">streaming</span></code>) and <code class="docutils literal notranslate"><span class="pre">offline</span></code> (i.e., <code class="docutils literal notranslate"><span class="pre">non-streaming</span></code>)
feature extraction</p></li>
<li><p>Support chunk-based processing</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This is especially usefull if you want to process audios of several
hours long, which may cause OOM if you send them for computation at once.
With chunk-based processing, you can process audios of arbirtray length.</p>
</div>
</li>
<li><p>Support batch processing</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>With <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a> you can extract features for a batch of audios</p>
</div>
</li>
</ul>
</div></blockquote>
<p>Currently implemented speech features and their counterparts in <a class="reference external" href="https://github.com/kaldi-asr/kaldi">Kaldi</a> are
listed in the following table.</p>
<table class="colwidths-given docutils align-default" id="id1">
<caption><span class="caption-number">Table 1 </span><span class="caption-text">Supported speech features</span><a class="headerlink" href="#id1" title="Permalink to this table"></a></caption>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Supported speech features</p></th>
<th class="head"><p>Counterpart in <a class="reference external" href="https://github.com/kaldi-asr/kaldi">Kaldi</a></p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/fbank.py#L10">kaldifeat.Fbank</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/featbin/compute-fbank-feats.cc">compute-fbank-feats</a></p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/mfcc.py#L10">kaldifeat.Mfcc</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/featbin/compute-mfcc-feats.cc">compute-mfcc-feats</a></p></td>
</tr>
<tr class="row-even"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/plp.py#L10">kaldifeat.Plp</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/featbin/compute-plp-feats.cc">compute-plp-feats</a></p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/spectrogram.py#L9">kaldifeat.Spectrogram</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/featbin/compute-spectrogram-feats.cc">compute-spectrogram-feats</a></p></td>
</tr>
<tr class="row-even"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/fbank.py#L16">kaldifeat.OnlineFbank</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/feat/online-feature.h#L160">kaldi::OnlineFbank</a></p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/mfcc.py#L16">kaldifeat.OnlineMfcc</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/feat/online-feature.h#L158">kaldi::OnlineMfcc</a></p></td>
</tr>
<tr class="row-even"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/plp.py#L16">kaldifeat.OnlinePlp</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/feat/online-feature.h#L159">kaldi::OnlinePlp</a></p></td>
</tr>
</tbody>
</table>
<p>Each feature computer needs an option. The following table lists the options
for each computer and the corresponding options in <a class="reference external" href="https://github.com/kaldi-asr/kaldi">Kaldi</a>.</p>
<div class="admonition hint">
<p class="admonition-title">Hint</p>
<p>Note that we reuse the parameter names from <a class="reference external" href="https://github.com/kaldi-asr/kaldi">Kaldi</a>.</p>
<p>Also, both online feature computers and offline feature computers share the
same option.</p>
</div>
<table class="colwidths-given docutils align-default" id="id2">
<caption><span class="caption-number">Table 2 </span><span class="caption-text">Feature computer options</span><a class="headerlink" href="#id2" title="Permalink to this table"></a></caption>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Options in <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a></p></th>
<th class="head"><p>Corresponding options in <a class="reference external" href="https://github.com/kaldi-asr/kaldi">Kaldi</a></p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-fbank.h#L19">kaldifeat.FbankOptions</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/feat/feature-fbank.h#L41">kaldi::FbankOptions</a></p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-mfcc.h#L22">kaldifeat.MfccOptions</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/feat/feature-mfcc.h#L38">kaldi::MfccOptions</a></p></td>
</tr>
<tr class="row-even"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-plp.h#L24">kaldifeat.PlpOptions</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/feat/feature-plp.h#L42">kaldi::PlpOptions</a></p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-spectrogram.h#L18">kaldifeat.SpectrogramOptions</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/feat/feature-spectrogram.h#L38">kaldi::SpectrogramOptions</a></p></td>
</tr>
<tr class="row-even"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-window.h#L30">kaldifeat.FrameExtractionOptions</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/feat/feature-window.h#L35">kaldi::FrameExtractionOptions</a></p></td>
</tr>
<tr class="row-odd"><td><p><a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/mel-computations.h#L17">kaldifeat.MelBanksOptions</a></p></td>
<td><p><a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/feat/mel-computations.h#L43">kaldi::MelBanksOptions</a></p></td>
</tr>
</tbody>
</table>
<p>Read more to learn how to install <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a> and how to use each feature
computer.</p>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="index.html" class="btn btn-neutral float-left" title="kaldifeat" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="installation.html" class="btn btn-neutral float-right" title="Installation" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2021, Fangjun Kuang.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

5
objects.inv Normal file
View File

@ -0,0 +1,5 @@
# Sphinx inventory version 2
# Project: kaldifeat
# Version: 1.16
# The remainder of this file is compressed using zlib.
<EFBFBD>QÍŠÃ ¾ûžӲ×>@¡‡Ò@鹨8i¤FC4°yû<79>8±ÕlÃö"Ã÷ç7Z÷¶åÝØ)î¼ÜiqÍo®ŒóBká•5Æ·ú«FaâøCh©jžO/ÇòÀÂäìÐWðQà,]‰$–ÝÁ(#á'OŒhHÃÙK&mE×>ÏlvÉÅŽ±W@Ðæ{›ëˆBåPakå¾ÝXD<G4h˜'ì?¶rô öÎÜD_5¹0òœ‰/ÅØàðÜÖ7aé2 ¼x¯Í~SßÕvÓ¢nÅé·9'âæ¸?Àd¿¸Wik´2p]鞲˫O<C2AB>£E~¡Ê

121
search.html Normal file
View File

@ -0,0 +1,121 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Search &mdash; kaldifeat 1.16 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/js/theme.js"></script>
<script src="_static/searchtools.js"></script>
<script src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="#" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> kaldifeat
</a>
<div class="version">
1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="#" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage/index.html">Usage</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">kaldifeat</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content style-external-links">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home"></a> &raquo;</li>
<li>Search</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<noscript>
<div id="fallback" class="admonition warning">
<p class="last">
Please activate JavaScript to enable the search functionality.
</p>
</div>
</noscript>
<div id="search-results">
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2021, Fangjun Kuang.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
<script>
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
<script id="searchindexloader"></script>
</body>
</html>

1
searchindex.js Normal file

File diff suppressed because one or more lines are too long

116
usage/fbank.html Normal file
View File

@ -0,0 +1,116 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>kaldifeat.Fbank &mdash; kaldifeat 1.16 documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="kaldifeat.OnlineFbank" href="online_fbank.html" />
<link rel="prev" title="kaldifeat.FbankOptions" href="fbank_options.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> kaldifeat
</a>
<div class="version">
1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Usage</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="fbank_options.html">kaldifeat.FbankOptions</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">kaldifeat.Fbank</a></li>
<li class="toctree-l2"><a class="reference internal" href="online_fbank.html">kaldifeat.OnlineFbank</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">kaldifeat</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content style-external-links">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="index.html">Usage</a> &raquo;</li>
<li>kaldifeat.Fbank</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/docs/source/usage/fbank.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="kaldifeat-fbank">
<h1>kaldifeat.Fbank<a class="headerlink" href="#kaldifeat-fbank" title="Permalink to this heading"></a></h1>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="fbank_options.html" class="btn btn-neutral float-left" title="kaldifeat.FbankOptions" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="online_fbank.html" class="btn btn-neutral float-right" title="kaldifeat.OnlineFbank" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2021, Fangjun Kuang.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

483
usage/fbank_options.html Normal file
View File

@ -0,0 +1,483 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>kaldifeat.FbankOptions &mdash; kaldifeat 1.16 documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="kaldifeat.Fbank" href="fbank.html" />
<link rel="prev" title="Usage" href="index.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> kaldifeat
</a>
<div class="version">
1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Usage</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">kaldifeat.FbankOptions</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#example-usage">Example usage</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="fbank.html">kaldifeat.Fbank</a></li>
<li class="toctree-l2"><a class="reference internal" href="online_fbank.html">kaldifeat.OnlineFbank</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">kaldifeat</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content style-external-links">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="index.html">Usage</a> &raquo;</li>
<li>kaldifeat.FbankOptions</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/docs/source/usage/fbank_options.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="kaldifeat-fbankoptions">
<h1>kaldifeat.FbankOptions<a class="headerlink" href="#kaldifeat-fbankoptions" title="Permalink to this heading"></a></h1>
<p>If you want to construct an instance of <a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/fbank.py#L10">kaldifeat.Fbank</a> or
<a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/kaldifeat/fbank.py#L16">kaldifeat.OnlineFbank</a>, you have to provide an instance of
<a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-fbank.h#L19">kaldifeat.FbankOptions</a>.</p>
<p>The following code shows how to construct an instance of <a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-fbank.h#L19">kaldifeat.FbankOptions</a>.</p>
<div class="literal-block-wrapper docutils container" id="id2">
<div class="code-block-caption"><span class="caption-number">Listing 1 </span><span class="caption-text">Usage of <a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-fbank.h#L19">kaldifeat.FbankOptions</a></span><a class="headerlink" href="#id2" title="Permalink to this code"></a></div>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span>$ python3
Python 3.8.0 (default, Oct 28 2019, 16:14:01)
[GCC 8.3.0] on linux
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&gt;&gt;&gt; import kaldifeat
<span class="hll">&gt;&gt;&gt; opts = kaldifeat.FbankOptions()
</span>&gt;&gt;&gt; print(opts)
<span class="hll">frame_opts:
</span>samp_freq: 16000
frame_shift_ms: 10
frame_length_ms: 25
dither: 1
preemph_coeff: 0.97
remove_dc_offset: 1
window_type: povey
round_to_power_of_two: 1
blackman_coeff: 0.42
snip_edges: 1
max_feature_vectors: -1
<span class="hll">mel_opts:
</span>num_bins: 23
low_freq: 20
high_freq: 0
vtln_low: 100
vtln_high: -500
debug_mel: 0
htk_mode: 0
use_energy: 0
energy_floor: 0
raw_energy: 1
htk_compat: 0
use_log_fbank: 1
use_power: 1
<span class="hll">device: cpu
</span>
&gt;&gt;&gt; print(opts.dither)
Traceback (most recent call last):
File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
AttributeError: &#39;_kaldifeat.FbankOptions&#39; object has no attribute &#39;dither&#39;
&gt;&gt;&gt;
&gt;&gt;&gt; print(opts.frame_opts.dither)
1.0
&gt;&gt;&gt; opts.frame_opts.dither = 0 # disable dither
&gt;&gt;&gt; print(opts.frame_opts.dither)
0.0
&gt;&gt;&gt; import torch
&gt;&gt;&gt; print(opts.device)
cpu
&gt;&gt;&gt; opts.device = &#39;cuda:0&#39;
&gt;&gt;&gt; print(opts.device)
cuda:0
&gt;&gt;&gt; opts.device = torch.device(&#39;cuda&#39;, 1)
&gt;&gt;&gt; print(opts.device)
cuda:1
&gt;&gt;&gt; opts.device = &#39;cpu&#39;
&gt;&gt;&gt; print(opts.device)
cpu
&gt;&gt;&gt; print(opts.mel_opts.num_bins)
23
&gt;&gt;&gt; opts.mel_opts.num_bins = 80
&gt;&gt;&gt; print(opts.mel_opts.num_bins)
80
</pre></div>
</div>
</div>
<p>Note that we reuse the same option name with <a class="reference external" href="https://github.com/kaldi-asr/kaldi/blob/master/src/featbin/compute-fbank-feats.cc">compute-fbank-feats</a> from <a class="reference external" href="https://github.com/kaldi-asr/kaldi">Kaldi</a>:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ compute-fbank-feats --help
</pre></div>
</div>
<div class="literal-block-wrapper docutils container" id="id3">
<div class="code-block-caption"><span class="caption-number">Listing 2 </span><span class="caption-text">Output of <code class="docutils literal notranslate"><span class="pre">compute-fbank-feats</span> <span class="pre">--help</span></code></span><a class="headerlink" href="#id3" title="Permalink to this code"></a></div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">compute</span><span class="o">-</span><span class="n">fbank</span><span class="o">-</span><span class="n">feats</span>
<span class="n">Create</span> <span class="n">Mel</span><span class="o">-</span><span class="nb">filter</span> <span class="n">bank</span> <span class="p">(</span><span class="n">FBANK</span><span class="p">)</span> <span class="n">feature</span> <span class="n">files</span><span class="o">.</span>
<span class="n">Usage</span><span class="p">:</span> <span class="n">compute</span><span class="o">-</span><span class="n">fbank</span><span class="o">-</span><span class="n">feats</span> <span class="p">[</span><span class="n">options</span><span class="o">...</span><span class="p">]</span> <span class="o">&lt;</span><span class="n">wav</span><span class="o">-</span><span class="n">rspecifier</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="n">feats</span><span class="o">-</span><span class="n">wspecifier</span><span class="o">&gt;</span>
<span class="n">Options</span><span class="p">:</span>
<span class="o">--</span><span class="n">allow</span><span class="o">-</span><span class="n">downsample</span> <span class="p">:</span> <span class="n">If</span> <span class="n">true</span><span class="p">,</span> <span class="n">allow</span> <span class="n">the</span> <span class="nb">input</span> <span class="n">waveform</span> <span class="n">to</span> <span class="n">have</span> <span class="n">a</span> <span class="n">higher</span> <span class="n">frequency</span> <span class="n">than</span> <span class="n">the</span> <span class="n">specified</span> <span class="o">--</span><span class="n">sample</span><span class="o">-</span><span class="n">frequency</span> <span class="p">(</span><span class="ow">and</span> <span class="n">we</span><span class="s1">&#39;ll downsample). (bool, default = false)</span>
<span class="o">--</span><span class="n">allow</span><span class="o">-</span><span class="n">upsample</span> <span class="p">:</span> <span class="n">If</span> <span class="n">true</span><span class="p">,</span> <span class="n">allow</span> <span class="n">the</span> <span class="nb">input</span> <span class="n">waveform</span> <span class="n">to</span> <span class="n">have</span> <span class="n">a</span> <span class="n">lower</span> <span class="n">frequency</span> <span class="n">than</span> <span class="n">the</span> <span class="n">specified</span> <span class="o">--</span><span class="n">sample</span><span class="o">-</span><span class="n">frequency</span> <span class="p">(</span><span class="ow">and</span> <span class="n">we</span><span class="s1">&#39;ll upsample). (bool, default = false)</span>
<span class="o">--</span><span class="n">blackman</span><span class="o">-</span><span class="n">coeff</span> <span class="p">:</span> <span class="n">Constant</span> <span class="n">coefficient</span> <span class="k">for</span> <span class="n">generalized</span> <span class="n">Blackman</span> <span class="n">window</span><span class="o">.</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mf">0.42</span><span class="p">)</span>
<span class="o">--</span><span class="n">channel</span> <span class="p">:</span> <span class="n">Channel</span> <span class="n">to</span> <span class="n">extract</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span> <span class="o">-&gt;</span> <span class="n">expect</span> <span class="n">mono</span><span class="p">,</span> <span class="mi">0</span> <span class="o">-&gt;</span> <span class="n">left</span><span class="p">,</span> <span class="mi">1</span> <span class="o">-&gt;</span> <span class="n">right</span><span class="p">)</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="o">--</span><span class="n">debug</span><span class="o">-</span><span class="n">mel</span> <span class="p">:</span> <span class="n">Print</span> <span class="n">out</span> <span class="n">debugging</span> <span class="n">information</span> <span class="k">for</span> <span class="n">mel</span> <span class="nb">bin</span> <span class="n">computation</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="n">false</span><span class="p">)</span>
<span class="o">--</span><span class="n">dither</span> <span class="p">:</span> <span class="n">Dithering</span> <span class="n">constant</span> <span class="p">(</span><span class="mf">0.0</span> <span class="n">means</span> <span class="n">no</span> <span class="n">dither</span><span class="p">)</span><span class="o">.</span> <span class="n">If</span> <span class="n">you</span> <span class="n">turn</span> <span class="n">this</span> <span class="n">off</span><span class="p">,</span> <span class="n">you</span> <span class="n">should</span> <span class="nb">set</span> <span class="n">the</span> <span class="o">--</span><span class="n">energy</span><span class="o">-</span><span class="n">floor</span> <span class="n">option</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">g</span><span class="o">.</span> <span class="n">to</span> <span class="mf">1.0</span> <span class="ow">or</span> <span class="mf">0.1</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="o">--</span><span class="n">energy</span><span class="o">-</span><span class="n">floor</span> <span class="p">:</span> <span class="n">Floor</span> <span class="n">on</span> <span class="n">energy</span> <span class="p">(</span><span class="n">absolute</span><span class="p">,</span> <span class="ow">not</span> <span class="n">relative</span><span class="p">)</span> <span class="ow">in</span> <span class="n">FBANK</span> <span class="n">computation</span><span class="o">.</span> <span class="n">Only</span> <span class="n">makes</span> <span class="n">a</span> <span class="n">difference</span> <span class="k">if</span> <span class="o">--</span><span class="n">use</span><span class="o">-</span><span class="n">energy</span><span class="o">=</span><span class="n">true</span><span class="p">;</span> <span class="n">only</span> <span class="n">necessary</span> <span class="k">if</span> <span class="o">--</span><span class="n">dither</span><span class="o">=</span><span class="mf">0.0</span><span class="o">.</span> <span class="n">Suggested</span> <span class="n">values</span><span class="p">:</span> <span class="mf">0.1</span> <span class="ow">or</span> <span class="mf">1.0</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
<span class="o">--</span><span class="n">frame</span><span class="o">-</span><span class="n">length</span> <span class="p">:</span> <span class="n">Frame</span> <span class="n">length</span> <span class="ow">in</span> <span class="n">milliseconds</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mi">25</span><span class="p">)</span>
<span class="o">--</span><span class="n">frame</span><span class="o">-</span><span class="n">shift</span> <span class="p">:</span> <span class="n">Frame</span> <span class="n">shift</span> <span class="ow">in</span> <span class="n">milliseconds</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mi">10</span><span class="p">)</span>
<span class="o">--</span><span class="n">high</span><span class="o">-</span><span class="n">freq</span> <span class="p">:</span> <span class="n">High</span> <span class="n">cutoff</span> <span class="n">frequency</span> <span class="k">for</span> <span class="n">mel</span> <span class="n">bins</span> <span class="p">(</span><span class="k">if</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">offset</span> <span class="kn">from</span> <span class="nn">Nyquist</span><span class="p">)</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
<span class="o">--</span><span class="n">htk</span><span class="o">-</span><span class="n">compat</span> <span class="p">:</span> <span class="n">If</span> <span class="n">true</span><span class="p">,</span> <span class="n">put</span> <span class="n">energy</span> <span class="n">last</span><span class="o">.</span> <span class="ne">Warning</span><span class="p">:</span> <span class="ow">not</span> <span class="n">sufficient</span> <span class="n">to</span> <span class="n">get</span> <span class="n">HTK</span> <span class="n">compatible</span> <span class="n">features</span> <span class="p">(</span><span class="n">need</span> <span class="n">to</span> <span class="n">change</span> <span class="n">other</span> <span class="n">parameters</span><span class="p">)</span><span class="o">.</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="n">false</span><span class="p">)</span>
<span class="o">--</span><span class="n">low</span><span class="o">-</span><span class="n">freq</span> <span class="p">:</span> <span class="n">Low</span> <span class="n">cutoff</span> <span class="n">frequency</span> <span class="k">for</span> <span class="n">mel</span> <span class="n">bins</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mi">20</span><span class="p">)</span>
<span class="o">--</span><span class="nb">max</span><span class="o">-</span><span class="n">feature</span><span class="o">-</span><span class="n">vectors</span> <span class="p">:</span> <span class="n">Memory</span> <span class="n">optimization</span><span class="o">.</span> <span class="n">If</span> <span class="n">larger</span> <span class="n">than</span> <span class="mi">0</span><span class="p">,</span> <span class="n">periodically</span> <span class="n">remove</span> <span class="n">feature</span> <span class="n">vectors</span> <span class="n">so</span> <span class="n">that</span> <span class="n">only</span> <span class="n">this</span> <span class="n">number</span> <span class="n">of</span> <span class="n">the</span> <span class="n">latest</span> <span class="n">feature</span> <span class="n">vectors</span> <span class="ow">is</span> <span class="n">retained</span><span class="o">.</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="o">--</span><span class="nb">min</span><span class="o">-</span><span class="n">duration</span> <span class="p">:</span> <span class="n">Minimum</span> <span class="n">duration</span> <span class="n">of</span> <span class="n">segments</span> <span class="n">to</span> <span class="n">process</span> <span class="p">(</span><span class="ow">in</span> <span class="n">seconds</span><span class="p">)</span><span class="o">.</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
<span class="o">--</span><span class="n">num</span><span class="o">-</span><span class="n">mel</span><span class="o">-</span><span class="n">bins</span> <span class="p">:</span> <span class="n">Number</span> <span class="n">of</span> <span class="n">triangular</span> <span class="n">mel</span><span class="o">-</span><span class="n">frequency</span> <span class="n">bins</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mi">23</span><span class="p">)</span>
<span class="o">--</span><span class="n">output</span><span class="o">-</span><span class="nb">format</span> <span class="p">:</span> <span class="n">Format</span> <span class="n">of</span> <span class="n">the</span> <span class="n">output</span> <span class="n">files</span> <span class="p">[</span><span class="n">kaldi</span><span class="p">,</span> <span class="n">htk</span><span class="p">]</span> <span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;kaldi&quot;</span><span class="p">)</span>
<span class="o">--</span><span class="n">preemphasis</span><span class="o">-</span><span class="n">coefficient</span> <span class="p">:</span> <span class="n">Coefficient</span> <span class="k">for</span> <span class="n">use</span> <span class="ow">in</span> <span class="n">signal</span> <span class="n">preemphasis</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mf">0.97</span><span class="p">)</span>
<span class="o">--</span><span class="n">raw</span><span class="o">-</span><span class="n">energy</span> <span class="p">:</span> <span class="n">If</span> <span class="n">true</span><span class="p">,</span> <span class="n">compute</span> <span class="n">energy</span> <span class="n">before</span> <span class="n">preemphasis</span> <span class="ow">and</span> <span class="n">windowing</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="n">true</span><span class="p">)</span>
<span class="o">--</span><span class="n">remove</span><span class="o">-</span><span class="n">dc</span><span class="o">-</span><span class="n">offset</span> <span class="p">:</span> <span class="n">Subtract</span> <span class="n">mean</span> <span class="kn">from</span> <span class="nn">waveform</span> <span class="n">on</span> <span class="n">each</span> <span class="n">frame</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="n">true</span><span class="p">)</span>
<span class="o">--</span><span class="nb">round</span><span class="o">-</span><span class="n">to</span><span class="o">-</span><span class="n">power</span><span class="o">-</span><span class="n">of</span><span class="o">-</span><span class="n">two</span> <span class="p">:</span> <span class="n">If</span> <span class="n">true</span><span class="p">,</span> <span class="nb">round</span> <span class="n">window</span> <span class="n">size</span> <span class="n">to</span> <span class="n">power</span> <span class="n">of</span> <span class="n">two</span> <span class="n">by</span> <span class="n">zero</span><span class="o">-</span><span class="n">padding</span> <span class="nb">input</span> <span class="n">to</span> <span class="n">FFT</span><span class="o">.</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="n">true</span><span class="p">)</span>
<span class="o">--</span><span class="n">sample</span><span class="o">-</span><span class="n">frequency</span> <span class="p">:</span> <span class="n">Waveform</span> <span class="n">data</span> <span class="n">sample</span> <span class="n">frequency</span> <span class="p">(</span><span class="n">must</span> <span class="n">match</span> <span class="n">the</span> <span class="n">waveform</span> <span class="n">file</span><span class="p">,</span> <span class="k">if</span> <span class="n">specified</span> <span class="n">there</span><span class="p">)</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mi">16000</span><span class="p">)</span>
<span class="o">--</span><span class="n">snip</span><span class="o">-</span><span class="n">edges</span> <span class="p">:</span> <span class="n">If</span> <span class="n">true</span><span class="p">,</span> <span class="n">end</span> <span class="n">effects</span> <span class="n">will</span> <span class="n">be</span> <span class="n">handled</span> <span class="n">by</span> <span class="n">outputting</span> <span class="n">only</span> <span class="n">frames</span> <span class="n">that</span> <span class="n">completely</span> <span class="n">fit</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">file</span><span class="p">,</span> <span class="ow">and</span> <span class="n">the</span> <span class="n">number</span> <span class="n">of</span> <span class="n">frames</span> <span class="n">depends</span> <span class="n">on</span> <span class="n">the</span> <span class="n">frame</span><span class="o">-</span><span class="n">length</span><span class="o">.</span> <span class="n">If</span> <span class="n">false</span><span class="p">,</span> <span class="n">the</span> <span class="n">number</span> <span class="n">of</span> <span class="n">frames</span> <span class="n">depends</span> <span class="n">only</span> <span class="n">on</span> <span class="n">the</span> <span class="n">frame</span><span class="o">-</span><span class="n">shift</span><span class="p">,</span> <span class="ow">and</span> <span class="n">we</span> <span class="n">reflect</span> <span class="n">the</span> <span class="n">data</span> <span class="n">at</span> <span class="n">the</span> <span class="n">ends</span><span class="o">.</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="n">true</span><span class="p">)</span>
<span class="o">--</span><span class="n">subtract</span><span class="o">-</span><span class="n">mean</span> <span class="p">:</span> <span class="n">Subtract</span> <span class="n">mean</span> <span class="n">of</span> <span class="n">each</span> <span class="n">feature</span> <span class="n">file</span> <span class="p">[</span><span class="n">CMS</span><span class="p">];</span> <span class="ow">not</span> <span class="n">recommended</span> <span class="n">to</span> <span class="n">do</span> <span class="n">it</span> <span class="n">this</span> <span class="n">way</span><span class="o">.</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="n">false</span><span class="p">)</span>
<span class="o">--</span><span class="n">use</span><span class="o">-</span><span class="n">energy</span> <span class="p">:</span> <span class="n">Add</span> <span class="n">an</span> <span class="n">extra</span> <span class="n">dimension</span> <span class="k">with</span> <span class="n">energy</span> <span class="n">to</span> <span class="n">the</span> <span class="n">FBANK</span> <span class="n">output</span><span class="o">.</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="n">false</span><span class="p">)</span>
<span class="o">--</span><span class="n">use</span><span class="o">-</span><span class="n">log</span><span class="o">-</span><span class="n">fbank</span> <span class="p">:</span> <span class="n">If</span> <span class="n">true</span><span class="p">,</span> <span class="n">produce</span> <span class="n">log</span><span class="o">-</span><span class="n">filterbank</span><span class="p">,</span> <span class="k">else</span> <span class="n">produce</span> <span class="n">linear</span><span class="o">.</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="n">true</span><span class="p">)</span>
<span class="o">--</span><span class="n">use</span><span class="o">-</span><span class="n">power</span> <span class="p">:</span> <span class="n">If</span> <span class="n">true</span><span class="p">,</span> <span class="n">use</span> <span class="n">power</span><span class="p">,</span> <span class="k">else</span> <span class="n">use</span> <span class="n">magnitude</span><span class="o">.</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="n">true</span><span class="p">)</span>
<span class="o">--</span><span class="n">utt2spk</span> <span class="p">:</span> <span class="n">Utterance</span> <span class="n">to</span> <span class="n">speaker</span><span class="o">-</span><span class="nb">id</span> <span class="nb">map</span> <span class="p">(</span><span class="k">if</span> <span class="n">doing</span> <span class="n">VTLN</span> <span class="ow">and</span> <span class="n">you</span> <span class="n">have</span> <span class="n">warps</span> <span class="n">per</span> <span class="n">speaker</span><span class="p">)</span> <span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="o">--</span><span class="n">vtln</span><span class="o">-</span><span class="n">high</span> <span class="p">:</span> <span class="n">High</span> <span class="n">inflection</span> <span class="n">point</span> <span class="ow">in</span> <span class="n">piecewise</span> <span class="n">linear</span> <span class="n">VTLN</span> <span class="n">warping</span> <span class="n">function</span> <span class="p">(</span><span class="k">if</span> <span class="n">negative</span><span class="p">,</span> <span class="n">offset</span> <span class="kn">from</span> <span class="nn">high</span><span class="o">-</span><span class="n">mel</span><span class="o">-</span><span class="n">freq</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="o">-</span><span class="mi">500</span><span class="p">)</span>
<span class="o">--</span><span class="n">vtln</span><span class="o">-</span><span class="n">low</span> <span class="p">:</span> <span class="n">Low</span> <span class="n">inflection</span> <span class="n">point</span> <span class="ow">in</span> <span class="n">piecewise</span> <span class="n">linear</span> <span class="n">VTLN</span> <span class="n">warping</span> <span class="n">function</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mi">100</span><span class="p">)</span>
<span class="o">--</span><span class="n">vtln</span><span class="o">-</span><span class="nb">map</span> <span class="p">:</span> <span class="n">Map</span> <span class="kn">from</span> <span class="nn">utterance</span> <span class="ow">or</span> <span class="n">speaker</span><span class="o">-</span><span class="nb">id</span> <span class="n">to</span> <span class="n">vtln</span> <span class="n">warp</span> <span class="n">factor</span> <span class="p">(</span><span class="n">rspecifier</span><span class="p">)</span> <span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="o">--</span><span class="n">vtln</span><span class="o">-</span><span class="n">warp</span> <span class="p">:</span> <span class="n">Vtln</span> <span class="n">warp</span> <span class="n">factor</span> <span class="p">(</span><span class="n">only</span> <span class="n">applicable</span> <span class="k">if</span> <span class="n">vtln</span><span class="o">-</span><span class="nb">map</span> <span class="ow">not</span> <span class="n">specified</span><span class="p">)</span> <span class="p">(</span><span class="nb">float</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span>
<span class="o">--</span><span class="n">window</span><span class="o">-</span><span class="nb">type</span> <span class="p">:</span> <span class="n">Type</span> <span class="n">of</span> <span class="n">window</span> <span class="p">(</span><span class="s2">&quot;hamming&quot;</span><span class="o">|</span><span class="s2">&quot;hanning&quot;</span><span class="o">|</span><span class="s2">&quot;povey&quot;</span><span class="o">|</span><span class="s2">&quot;rectangular&quot;</span><span class="o">|</span><span class="s2">&quot;sine&quot;</span><span class="o">|</span><span class="s2">&quot;blackmann&quot;</span><span class="p">)</span> <span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;povey&quot;</span><span class="p">)</span>
<span class="o">--</span><span class="n">write</span><span class="o">-</span><span class="n">utt2dur</span> <span class="p">:</span> <span class="n">Wspecifier</span> <span class="n">to</span> <span class="n">write</span> <span class="n">duration</span> <span class="n">of</span> <span class="n">each</span> <span class="n">utterance</span> <span class="ow">in</span> <span class="n">seconds</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">g</span><span class="o">.</span> <span class="s1">&#39;ark,t:utt2dur&#39;</span><span class="o">.</span> <span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">Standard</span> <span class="n">options</span><span class="p">:</span>
<span class="o">--</span><span class="n">config</span> <span class="p">:</span> <span class="n">Configuration</span> <span class="n">file</span> <span class="n">to</span> <span class="n">read</span> <span class="p">(</span><span class="n">this</span> <span class="n">option</span> <span class="n">may</span> <span class="n">be</span> <span class="n">repeated</span><span class="p">)</span> <span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="o">--</span><span class="n">help</span> <span class="p">:</span> <span class="n">Print</span> <span class="n">out</span> <span class="n">usage</span> <span class="n">message</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="n">false</span><span class="p">)</span>
<span class="o">--</span><span class="nb">print</span><span class="o">-</span><span class="n">args</span> <span class="p">:</span> <span class="n">Print</span> <span class="n">the</span> <span class="n">command</span> <span class="n">line</span> <span class="n">arguments</span> <span class="p">(</span><span class="n">to</span> <span class="n">stderr</span><span class="p">)</span> <span class="p">(</span><span class="nb">bool</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="n">true</span><span class="p">)</span>
<span class="o">--</span><span class="n">verbose</span> <span class="p">:</span> <span class="n">Verbose</span> <span class="n">level</span> <span class="p">(</span><span class="n">higher</span><span class="o">-&gt;</span><span class="n">more</span> <span class="n">logging</span><span class="p">)</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
</pre></div>
</div>
</div>
<p>Please refer to the output of <code class="docutils literal notranslate"><span class="pre">compute-fbank-feats</span> <span class="pre">--help</span></code> for the meaning
of each field of <a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-fbank.h#L19">kaldifeat.FbankOptions</a>.</p>
<p>One thing worth noting is that <a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-fbank.h#L19">kaldifeat.FbankOptions</a> has a field <code class="docutils literal notranslate"><span class="pre">device</span></code>,
which is an instance of <code class="docutils literal notranslate"><span class="pre">torch.device</span></code>. You can assign it either a string, e.g.,
<code class="docutils literal notranslate"><span class="pre">&quot;cpu&quot;</span></code> or <code class="docutils literal notranslate"><span class="pre">&quot;cuda:0&quot;</span></code>, or an instance of <code class="docutils literal notranslate"><span class="pre">torch.device</span></code>, e.g., <code class="docutils literal notranslate"><span class="pre">torch.device(&quot;cpu&quot;)</span></code> or
<code class="docutils literal notranslate"><span class="pre">torch.device(&quot;cuda&quot;,</span> <span class="pre">1)</span></code>.</p>
<div class="admonition hint">
<p class="admonition-title">Hint</p>
<p>You can use this field to control whether the feature computer
constructed from it performs computation on CPU or CUDA.</p>
</div>
<div class="admonition caution">
<p class="admonition-title">Caution</p>
<p>If you use a CUDA device, make sure that you have installed a CUDA version
of <a class="reference external" href="https://pytorch.org/">PyTorch</a>.</p>
</div>
<section id="example-usage">
<h2>Example usage<a class="headerlink" href="#example-usage" title="Permalink to this heading"></a></h2>
<p>The following code from
<a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/tests/test_fbank_options.py">https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/python/tests/test_fbank_options.py</a>
demonstrate the usage of <a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-fbank.h#L19">kaldifeat.FbankOptions</a>:</p>
<div class="literal-block-wrapper docutils container" id="id4">
<div class="code-block-caption"><span class="caption-number">Listing 3 </span><span class="caption-text">Example usage of <a class="reference external" href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/csrc/feature-fbank.h#L19">kaldifeat.FbankOptions</a></span><a class="headerlink" href="#id4" title="Permalink to this code"></a></div>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/env python3</span>
<span class="c1">#</span>
<span class="c1"># Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)</span>
<span class="kn">import</span> <span class="nn">pickle</span>
<span class="kn">import</span> <span class="nn">torch</span>
<span class="kn">import</span> <span class="nn">kaldifeat</span>
<span class="k">def</span> <span class="nf">test_default</span><span class="p">():</span>
<span class="n">opts</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">FbankOptions</span><span class="p">()</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">samp_freq</span> <span class="o">==</span> <span class="mi">16000</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">frame_shift_ms</span> <span class="o">==</span> <span class="mf">10.0</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">frame_length_ms</span> <span class="o">==</span> <span class="mf">25.0</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">dither</span> <span class="o">==</span> <span class="mf">1.0</span>
<span class="k">assert</span> <span class="nb">abs</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">preemph_coeff</span> <span class="o">-</span> <span class="mf">0.97</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mf">1e-6</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">remove_dc_offset</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">window_type</span> <span class="o">==</span> <span class="s2">&quot;povey&quot;</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">round_to_power_of_two</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="k">assert</span> <span class="nb">abs</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">blackman_coeff</span> <span class="o">-</span> <span class="mf">0.42</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mf">1e-6</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">snip_edges</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">num_bins</span> <span class="o">==</span> <span class="mi">23</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">low_freq</span> <span class="o">==</span> <span class="mi">20</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">high_freq</span> <span class="o">==</span> <span class="mi">0</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">vtln_low</span> <span class="o">==</span> <span class="mi">100</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">vtln_high</span> <span class="o">==</span> <span class="o">-</span><span class="mi">500</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">debug_mel</span> <span class="ow">is</span> <span class="kc">False</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">htk_mode</span> <span class="ow">is</span> <span class="kc">False</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">use_energy</span> <span class="ow">is</span> <span class="kc">False</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">energy_floor</span> <span class="o">==</span> <span class="mf">0.0</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">raw_energy</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">htk_compat</span> <span class="ow">is</span> <span class="kc">False</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">use_log_fbank</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">use_power</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="s2">&quot;cpu&quot;</span>
<span class="k">def</span> <span class="nf">test_set_get</span><span class="p">():</span>
<span class="n">opts</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">FbankOptions</span><span class="p">()</span>
<span class="n">opts</span><span class="o">.</span><span class="n">use_energy</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">use_energy</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="n">opts</span><span class="o">.</span><span class="n">energy_floor</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">energy_floor</span> <span class="o">==</span> <span class="mi">1</span>
<span class="n">opts</span><span class="o">.</span><span class="n">raw_energy</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">raw_energy</span> <span class="ow">is</span> <span class="kc">False</span>
<span class="n">opts</span><span class="o">.</span><span class="n">htk_compat</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">htk_compat</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="n">opts</span><span class="o">.</span><span class="n">use_log_fbank</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">use_log_fbank</span> <span class="ow">is</span> <span class="kc">False</span>
<span class="n">opts</span><span class="o">.</span><span class="n">use_power</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">use_power</span> <span class="ow">is</span> <span class="kc">False</span>
<span class="n">opts</span><span class="o">.</span><span class="n">device</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">device</span><span class="p">(</span><span class="s2">&quot;cuda&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="s2">&quot;cuda&quot;</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">device</span><span class="o">.</span><span class="n">index</span> <span class="o">==</span> <span class="mi">1</span>
<span class="k">def</span> <span class="nf">test_set_get_frame_opts</span><span class="p">():</span>
<span class="n">opts</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">FbankOptions</span><span class="p">()</span>
<span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">samp_freq</span> <span class="o">=</span> <span class="mi">44100</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">samp_freq</span> <span class="o">==</span> <span class="mi">44100</span>
<span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">frame_shift_ms</span> <span class="o">=</span> <span class="mf">20.5</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">frame_shift_ms</span> <span class="o">==</span> <span class="mf">20.5</span>
<span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">frame_length_ms</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">frame_length_ms</span> <span class="o">==</span> <span class="mi">1</span>
<span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">dither</span> <span class="o">=</span> <span class="mf">0.5</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">dither</span> <span class="o">==</span> <span class="mf">0.5</span>
<span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">preemph_coeff</span> <span class="o">=</span> <span class="mf">0.25</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">preemph_coeff</span> <span class="o">==</span> <span class="mf">0.25</span>
<span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">remove_dc_offset</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">remove_dc_offset</span> <span class="ow">is</span> <span class="kc">False</span>
<span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">window_type</span> <span class="o">=</span> <span class="s2">&quot;hanning&quot;</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">window_type</span> <span class="o">==</span> <span class="s2">&quot;hanning&quot;</span>
<span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">round_to_power_of_two</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">round_to_power_of_two</span> <span class="ow">is</span> <span class="kc">False</span>
<span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">blackman_coeff</span> <span class="o">=</span> <span class="mf">0.25</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">blackman_coeff</span> <span class="o">==</span> <span class="mf">0.25</span>
<span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">snip_edges</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">snip_edges</span> <span class="ow">is</span> <span class="kc">False</span>
<span class="k">def</span> <span class="nf">test_set_get_mel_opts</span><span class="p">():</span>
<span class="n">opts</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">FbankOptions</span><span class="p">()</span>
<span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">num_bins</span> <span class="o">=</span> <span class="mi">100</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">num_bins</span> <span class="o">==</span> <span class="mi">100</span>
<span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">low_freq</span> <span class="o">=</span> <span class="mi">22</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">low_freq</span> <span class="o">==</span> <span class="mi">22</span>
<span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">high_freq</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">high_freq</span> <span class="o">==</span> <span class="mi">1</span>
<span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">vtln_low</span> <span class="o">=</span> <span class="mi">101</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">vtln_low</span> <span class="o">==</span> <span class="mi">101</span>
<span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">vtln_high</span> <span class="o">=</span> <span class="o">-</span><span class="mi">100</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">vtln_high</span> <span class="o">==</span> <span class="o">-</span><span class="mi">100</span>
<span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">debug_mel</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">debug_mel</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">htk_mode</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">htk_mode</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="k">def</span> <span class="nf">test_from_empty_dict</span><span class="p">():</span>
<span class="n">opts</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">FbankOptions</span><span class="o">.</span><span class="n">from_dict</span><span class="p">({})</span>
<span class="n">opts2</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">FbankOptions</span><span class="p">()</span>
<span class="k">assert</span> <span class="nb">str</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span> <span class="o">==</span> <span class="nb">str</span><span class="p">(</span><span class="n">opts2</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test_from_dict_partial</span><span class="p">():</span>
<span class="n">d</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;energy_floor&quot;</span><span class="p">:</span> <span class="mf">10.5</span><span class="p">,</span>
<span class="s2">&quot;htk_compat&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;mel_opts&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;num_bins&quot;</span><span class="p">:</span> <span class="mi">80</span><span class="p">,</span> <span class="s2">&quot;vtln_low&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span>
<span class="s2">&quot;frame_opts&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;window_type&quot;</span><span class="p">:</span> <span class="s2">&quot;hanning&quot;</span><span class="p">},</span>
<span class="p">}</span>
<span class="n">opts</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">FbankOptions</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">energy_floor</span> <span class="o">==</span> <span class="mf">10.5</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">htk_compat</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">num_bins</span> <span class="o">==</span> <span class="mi">80</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">vtln_low</span> <span class="o">==</span> <span class="mi">1</span>
<span class="k">assert</span> <span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">window_type</span> <span class="o">==</span> <span class="s2">&quot;hanning&quot;</span>
<span class="n">mel_opts</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">MelBanksOptions</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="s2">&quot;mel_opts&quot;</span><span class="p">])</span>
<span class="k">assert</span> <span class="nb">str</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="p">)</span> <span class="o">==</span> <span class="nb">str</span><span class="p">(</span><span class="n">mel_opts</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test_from_dict_full_and_as_dict</span><span class="p">():</span>
<span class="n">opts</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">FbankOptions</span><span class="p">()</span>
<span class="n">opts</span><span class="o">.</span><span class="n">htk_compat</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">num_bins</span> <span class="o">=</span> <span class="mi">80</span>
<span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">samp_freq</span> <span class="o">=</span> <span class="mi">10</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">opts</span><span class="o">.</span><span class="n">as_dict</span><span class="p">()</span>
<span class="k">assert</span> <span class="n">d</span><span class="p">[</span><span class="s2">&quot;htk_compat&quot;</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="k">assert</span> <span class="n">d</span><span class="p">[</span><span class="s2">&quot;mel_opts&quot;</span><span class="p">][</span><span class="s2">&quot;num_bins&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">80</span>
<span class="k">assert</span> <span class="n">d</span><span class="p">[</span><span class="s2">&quot;frame_opts&quot;</span><span class="p">][</span><span class="s2">&quot;samp_freq&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">10</span>
<span class="n">mel_opts</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">MelBanksOptions</span><span class="p">()</span>
<span class="n">mel_opts</span><span class="o">.</span><span class="n">num_bins</span> <span class="o">=</span> <span class="mi">80</span>
<span class="k">assert</span> <span class="n">d</span><span class="p">[</span><span class="s2">&quot;mel_opts&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">mel_opts</span><span class="o">.</span><span class="n">as_dict</span><span class="p">()</span>
<span class="n">frame_opts</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">FrameExtractionOptions</span><span class="p">()</span>
<span class="n">frame_opts</span><span class="o">.</span><span class="n">samp_freq</span> <span class="o">=</span> <span class="mi">10</span>
<span class="k">assert</span> <span class="n">d</span><span class="p">[</span><span class="s2">&quot;frame_opts&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">frame_opts</span><span class="o">.</span><span class="n">as_dict</span><span class="p">()</span>
<span class="n">opts2</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">FbankOptions</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
<span class="k">assert</span> <span class="nb">str</span><span class="p">(</span><span class="n">opts2</span><span class="p">)</span> <span class="o">==</span> <span class="nb">str</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span>
<span class="n">d</span><span class="p">[</span><span class="s2">&quot;htk_compat&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">d</span><span class="p">[</span><span class="s2">&quot;device&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">device</span><span class="p">(</span><span class="s2">&quot;cuda&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">opts3</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">FbankOptions</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">d</span><span class="p">)</span>
<span class="k">assert</span> <span class="n">opts3</span><span class="o">.</span><span class="n">htk_compat</span> <span class="ow">is</span> <span class="kc">False</span>
<span class="k">assert</span> <span class="n">opts3</span><span class="o">.</span><span class="n">device</span> <span class="o">==</span> <span class="n">torch</span><span class="o">.</span><span class="n">device</span><span class="p">(</span><span class="s2">&quot;cuda&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test_pickle</span><span class="p">():</span>
<span class="n">opts</span> <span class="o">=</span> <span class="n">kaldifeat</span><span class="o">.</span><span class="n">FbankOptions</span><span class="p">()</span>
<span class="n">opts</span><span class="o">.</span><span class="n">use_energy</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">opts</span><span class="o">.</span><span class="n">use_power</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">opts</span><span class="o">.</span><span class="n">device</span> <span class="o">=</span> <span class="n">torch</span><span class="o">.</span><span class="n">device</span><span class="p">(</span><span class="s2">&quot;cuda&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">opts</span><span class="o">.</span><span class="n">frame_opts</span><span class="o">.</span><span class="n">samp_freq</span> <span class="o">=</span> <span class="mi">44100</span>
<span class="n">opts</span><span class="o">.</span><span class="n">mel_opts</span><span class="o">.</span><span class="n">num_bins</span> <span class="o">=</span> <span class="mi">100</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span>
<span class="n">opts2</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">assert</span> <span class="nb">str</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span> <span class="o">==</span> <span class="nb">str</span><span class="p">(</span><span class="n">opts2</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
<span class="n">test_default</span><span class="p">()</span>
<span class="n">test_set_get</span><span class="p">()</span>
<span class="n">test_set_get_frame_opts</span><span class="p">()</span>
<span class="n">test_set_get_mel_opts</span><span class="p">()</span>
<span class="n">test_from_empty_dict</span><span class="p">()</span>
<span class="n">test_from_dict_partial</span><span class="p">()</span>
<span class="n">test_from_dict_full_and_as_dict</span><span class="p">()</span>
<span class="n">test_pickle</span><span class="p">()</span>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
<span class="n">main</span><span class="p">()</span>
</pre></div>
</div>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="index.html" class="btn btn-neutral float-left" title="Usage" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="fbank.html" class="btn btn-neutral float-right" title="kaldifeat.Fbank" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2021, Fangjun Kuang.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

126
usage/index.html Normal file
View File

@ -0,0 +1,126 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Usage &mdash; kaldifeat 1.16 documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="kaldifeat.FbankOptions" href="fbank_options.html" />
<link rel="prev" title="Installation" href="../installation.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> kaldifeat
</a>
<div class="version">
1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Usage</a><ul>
<li class="toctree-l2"><a class="reference internal" href="fbank_options.html">kaldifeat.FbankOptions</a></li>
<li class="toctree-l2"><a class="reference internal" href="fbank.html">kaldifeat.Fbank</a></li>
<li class="toctree-l2"><a class="reference internal" href="online_fbank.html">kaldifeat.OnlineFbank</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">kaldifeat</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content style-external-links">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li>Usage</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/docs/source/usage/index.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="usage">
<h1>Usage<a class="headerlink" href="#usage" title="Permalink to this heading"></a></h1>
<p>This section describes how to use feature computers in <a class="reference external" href="https://github.com/csukuangfj/kaldifeat">kaldifeat</a>.</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="fbank_options.html">kaldifeat.FbankOptions</a><ul>
<li class="toctree-l2"><a class="reference internal" href="fbank_options.html#example-usage">Example usage</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="fbank.html">kaldifeat.Fbank</a></li>
<li class="toctree-l1"><a class="reference internal" href="online_fbank.html">kaldifeat.OnlineFbank</a></li>
</ul>
</div>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="../installation.html" class="btn btn-neutral float-left" title="Installation" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="fbank_options.html" class="btn btn-neutral float-right" title="kaldifeat.FbankOptions" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2021, Fangjun Kuang.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

114
usage/online_fbank.html Normal file
View File

@ -0,0 +1,114 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>kaldifeat.OnlineFbank &mdash; kaldifeat 1.16 documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="prev" title="kaldifeat.Fbank" href="fbank.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home"> kaldifeat
</a>
<div class="version">
1.16
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Usage</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="fbank_options.html">kaldifeat.FbankOptions</a></li>
<li class="toctree-l2"><a class="reference internal" href="fbank.html">kaldifeat.Fbank</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">kaldifeat.OnlineFbank</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">kaldifeat</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content style-external-links">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
<li><a href="index.html">Usage</a> &raquo;</li>
<li>kaldifeat.OnlineFbank</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/csukuangfj/kaldifeat/blob/master/kaldifeat/docs/source/usage/online_fbank.rst" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="kaldifeat-onlinefbank">
<h1>kaldifeat.OnlineFbank<a class="headerlink" href="#kaldifeat-onlinefbank" title="Permalink to this heading"></a></h1>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="fbank.html" class="btn btn-neutral float-left" title="kaldifeat.Fbank" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2021, Fangjun Kuang.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>