`_.
+
+.. code: `TODO_LINK/extensions`_
+
+.. _Accelerate: https://developer.apple.com/documentation/accelerate/blas?language=objc
+.. _Metal: https://developer.apple.com/documentation/metal?language=objc
+.. _Metal-cpp: https://developer.apple.com/metal/cpp/
+.. _`Metal Specification`: https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf
+.. _`Metal Example`: https://developer.apple.com/documentation/metal/performing_calculations_on_a_gpu?language=objc
+.. _PyBind11: https://pybind11.readthedocs.io/en/stable/
\ No newline at end of file
diff --git a/docs/build/html/_sources/examples/linear_regression.rst.txt b/docs/build/html/_sources/examples/linear_regression.rst.txt
new file mode 100644
index 000000000..19fc0d435
--- /dev/null
+++ b/docs/build/html/_sources/examples/linear_regression.rst.txt
@@ -0,0 +1,77 @@
+.. _linear_regression:
+
+Linear Regression
+-----------------
+
+Let's implement a basic linear regression model as a starting point to
+learn MLX. First import the core package and setup some problem metadata:
+
+.. code-block:: python
+
+ import mlx.core as mx
+
+ num_features = 100
+ num_examples = 1_000
+ num_iters = 10_000 # iterations of SGD
+ lr = 0.01 # learning rate for SGD
+
+
+We'll generate a synthetic dataset by:
+
+1. Sampling the design matrix ``X``.
+2. Sampling a ground truth parameter vector ``w_star``.
+3. Compute the dependent values ``y`` by adding Gaussian noise to ``X @ w_star``.
+
+.. code-block:: python
+
+ # True parameters
+ w_star = mx.random.normal((num_features,))
+
+ # Input examples (design matrix)
+ X = mx.random.normal((num_examples, num_features))
+
+ # Noisy labels
+ eps = 1e-2 * mx.random.normal((num_examples,))
+ y = X @ w_star + eps
+
+
+We will use SGD to find the optimal weights. To start, define the squared loss
+and get the gradient function of the loss with respect to the parameters.
+
+.. code-block:: python
+
+ def loss_fn(w):
+ return 0.5 * mx.mean(mx.square(X @ w - y))
+
+ grad_fn = mx.grad(loss_fn)
+
+Start the optimization by initializing the parameters ``w`` randomly. Then
+repeatedly update the parameters for ``num_iters`` iterations.
+
+.. code-block:: python
+
+ w = 1e-2 * mx.random.normal((num_features,))
+
+ for _ in range(num_iters):
+ grad = grad_fn(w)
+ w = w - lr * grad
+ mx.eval(w)
+
+Finally, compute the loss of the learned parameters and verify that they are
+close to the ground truth parameters.
+
+.. code-block:: python
+
+ loss = loss_fn(w)
+ error_norm = mx.sum(mx.square(w - w_star)).item() ** 0.5
+
+ print(
+ f"Loss {loss.item():.5f}, |w-w*| = {error_norm:.5f}, "
+ )
+ # Should print something close to: Loss 0.00005, |w-w*| = 0.00364
+
+Complete `linear regression
+`_
+and `logistic regression
+`_
+examples are available in the MLX GitHub repo.
diff --git a/docs/build/html/_sources/examples/llama-inference.rst.txt b/docs/build/html/_sources/examples/llama-inference.rst.txt
new file mode 100644
index 000000000..c1a6a7e84
--- /dev/null
+++ b/docs/build/html/_sources/examples/llama-inference.rst.txt
@@ -0,0 +1,382 @@
+LLM inference
+==============
+
+MLX enables efficient inference of large-ish transformers on Apple silicon
+without compromising on ease of use. In this example we will create an
+inference script for the Llama family of transformer models in which the model
+is defined in less than 200 lines of python.
+
+Implementing the model
+----------------------
+
+We will use the neural network building blocks defined in the :mod:`mlx.nn`
+module to concisely define the model architecture.
+
+Attention layer
+^^^^^^^^^^^^^^^^
+
+We will start with the llama attention layer which notably uses the RoPE
+positional encoding. [1]_ In addition, our attention layer will optionally use a
+key/value cache that will be concatenated with the provided keys and values to
+support efficient inference.
+
+Our implementation uses :class:`mlx.nn.Linear` for all the projections and
+:class:`mlx.nn.RoPE` for the positional encoding.
+
+.. code-block:: python
+
+ import mlx.core as mx
+ import mlx.nn as nn
+
+ class LlamaAttention(nn.Module):
+ def __init__(self, dims: int, num_heads: int):
+ super().__init__()
+
+ self.num_heads = num_heads
+
+ self.rope = nn.RoPE(dims // num_heads, traditional=True)
+ self.query_proj = nn.Linear(dims, dims, bias=False)
+ self.key_proj = nn.Linear(dims, dims, bias=False)
+ self.value_proj = nn.Linear(dims, dims, bias=False)
+ self.out_proj = nn.Linear(dims, dims, bias=False)
+
+ def __call__(self, queries, keys, values, mask=None, cache=None):
+ queries = self.query_proj(queries)
+ keys = self.key_proj(keys)
+ values = self.value_proj(values)
+
+ # Extract some shapes
+ num_heads = self.num_heads
+ B, L, D = queries.shape
+
+ # Prepare the queries, keys and values for the attention computation
+ queries = queries.reshape(B, L, num_heads, -1).transpose(0, 2, 1, 3)
+ keys = keys.reshape(B, L, num_heads, -1).transpose(0, 2, 1, 3)
+ values = values.reshape(B, L, num_heads, -1).transpose(0, 2, 1, 3)
+
+ # Add RoPE to the queries and keys and combine them with the cache
+ if cache is not None:
+ key_cache, value_cache = cache
+ queries = self.rope(queries, offset=key_cache.shape[2])
+ keys = self.rope(keys, offset=key_cache.shape[2])
+ keys = mx.concatenate([key_cache, keys], axis=2)
+ values = mx.concatenate([value_cache, values], axis=2)
+ else:
+ queries = self.rope(queries)
+ keys = self.rope(keys)
+
+ # Finally perform the attention computation
+ scale = math.sqrt(1 / queries.shape[-1])
+ scores = (queries * scale) @ keys.transpose(0, 1, 3, 2)
+ if mask is not None:
+ scores = scores + mask
+ scores = mx.softmax(scores, axis=-1)
+ values_hat = (scores @ values).transpose(0, 2, 1, 3).reshape(B, L, -1)
+
+ # Note that we return the keys and values to possibly be used as a cache
+ return self.out_proj(values_hat), (keys, values)
+
+Encoder layer
+^^^^^^^^^^^^^
+
+The other component of the Llama model is the encoder layer which uses RMS
+normalization [2]_ and SwiGLU. [3]_ For RMS normalization we will use
+:class:`mlx.nn.RMSNorm` that is already provided in :mod:`mlx.nn`.
+
+.. code-block:: python
+
+ class LlamaEncoderLayer(nn.Module):
+ def __init__(self, dims: int, mlp_dims: int, num_heads: int):
+ super().__init__()
+
+ self.attention = LlamaAttention(dims, num_heads)
+
+ self.norm1 = nn.RMSNorm(dims)
+ self.norm2 = nn.RMSNorm(dims)
+
+ self.linear1 = nn.Linear(dims, mlp_dims, bias=False)
+ self.linear2 = nn.Linear(dims, mlp_dims, bias=False)
+ self.linear3 = nn.Linear(mlp_dims, dims, bias=False)
+
+ def __call__(self, x, mask=None, cache=None):
+ y = self.norm1(x)
+ y, cache = self.attention(y, y, y, mask, cache)
+ x = x + y
+
+ y = self.norm2(x)
+ a = self.linear1(y)
+ b = self.linear2(y)
+ y = a * mx.sigmoid(a) * b
+ y = self.linear3(y)
+ x = x + y
+
+ return x, cache
+
+Full model
+^^^^^^^^^^
+
+To implement any Llama model we simply have to combine ``LlamaEncoderLayer``
+instances with an :class:`mlx.nn.Embedding` to embed the input tokens.
+
+.. code-block:: python
+
+ class Llama(nn.Module):
+ def __init__(
+ self, num_layers: int, vocab_size: int, dims: int, mlp_dims: int, num_heads: int
+ ):
+ super().__init__()
+
+ self.embedding = nn.Embedding(vocab_size, dims)
+ self.layers = [
+ LlamaEncoderLayer(dims, mlp_dims, num_heads) for _ in range(num_layers)
+ ]
+ self.norm = nn.RMSNorm(dims)
+ self.out_proj = nn.Linear(dims, vocab_size, bias=False)
+
+ def __call__(self, x):
+ mask = nn.MultiHeadAttention.create_additive_causal_mask(x.shape[1])
+ mask = mask.astype(self.embedding.weight.dtype)
+
+ x = self.embedding(x)
+ for l in self.layers:
+ x, _ = l(x, mask)
+ x = self.norm(x)
+ return self.out_proj(x)
+
+Note that in the implementation above we use a simple list to hold the encoder
+layers but using ``model.parameters()`` will still consider these layers.
+
+Generation
+^^^^^^^^^^^
+
+Our ``Llama`` module can be used for training but not inference as the
+``__call__`` method above processes one input, completely ignores the cache and
+performs no sampling whatsoever. In the rest of this subsection, we will
+implement the inference function as a python generator that processes the
+prompt and then autoregressively yields tokens one at a time.
+
+.. code-block:: python
+
+ class Llama(nn.Module):
+ ...
+
+ def generate(self, x, temp=1.0):
+ cache = []
+
+ # Make an additive causal mask. We will need that to process the prompt.
+ mask = nn.MultiHeadAttention.create_additive_causal_mask(x.shape[1])
+ mask = mask.astype(self.embedding.weight.dtype)
+
+ # First we process the prompt x the same way as in __call__ but
+ # save the caches in cache
+ x = self.embedding(x)
+ for l in self.layers:
+ x, c = l(x, mask=mask)
+ cache.append(c) # <--- we store the per layer cache in a
+ # simple python list
+ x = self.norm(x)
+ y = self.out_proj(x[:, -1]) # <--- we only care about the last logits
+ # that generate the next token
+ y = mx.random.categorical(y * (1/temp))
+
+ # y now has size [1]
+ # Since MLX is lazily evaluated nothing is computed yet.
+ # Calling y.item() would force the computation to happen at
+ # this point but we can also choose not to do that and let the
+ # user choose when to start the computation.
+ yield y
+
+ # Now we parsed the prompt and generated the first token we
+ # need to feed it back into the model and loop to generate the
+ # rest.
+ while True:
+ # Unsqueezing the last dimension to add a sequence length
+ # dimension of 1
+ x = y[:, None]
+
+ x = self.embedding(x)
+ for i in range(len(cache)):
+ # We are overwriting the arrays in the cache list. When
+ # the computation will happen, MLX will be discarding the
+ # old cache the moment it is not needed anymore.
+ x, cache[i] = self.layers[i](x, mask=None, cache=cache[i])
+ x = self.norm(x)
+ y = self.out_proj(x[:, -1])
+ y = mx.random.categorical(y * (1/temp))
+
+ yield y
+
+Putting it all together
+^^^^^^^^^^^^^^^^^^^^^^^
+
+We now have everything we need to create a Llama model and sample tokens from
+it. In the following code, we randomly initialize a small Llama model, process
+6 tokens of prompt and generate 10 tokens.
+
+.. code-block:: python
+
+ model = Llama(num_layers=12, vocab_size=8192, dims=512, mlp_dims=1024, num_heads=8)
+
+ # Since MLX is lazily evaluated nothing has actually been materialized yet.
+ # We could have set the `dims` to 20_000 on a machine with 8GB of RAM and the
+ # code above would still run. Let's actually materialize the model.
+ mx.eval(model.parameters())
+
+ prompt = mx.array([[1, 10, 8, 32, 44, 7]]) # <-- Note the double brackets because we
+ # have a batch dimension even
+ # though it is 1 in this case
+
+ generated = [t for i, t in zip(range(10), model.generate(prompt, 0.8))]
+
+ # Since we haven't evaluated anything, nothing is computed yet. The list
+ # `generated` contains the arrays that hold the computation graph for the
+ # full processing of the prompt and the generation of 10 tokens.
+ #
+ # We can evaluate them one at a time, or all together. Concatenate them or
+ # print them. They would all result in very similar runtimes and give exactly
+ # the same results.
+ mx.eval(generated)
+
+Converting the weights
+----------------------
+
+This section assumes that you have access to the original Llama weights and the
+SentencePiece model that comes with them. We will write a small script to
+convert the PyTorch weights to MLX compatible ones and write them in a NPZ file
+that can be loaded directly by MLX.
+
+.. code-block:: python
+
+ import argparse
+ from itertools import starmap
+
+ import numpy as np
+ import torch
+
+ def map_torch_to_mlx(key, value):
+ if "tok_embedding" in key:
+ key = "embedding.weight"
+
+ elif "norm" in key:
+ key = key.replace("attention_norm", "norm1").replace("ffn_norm", "norm2")
+
+ elif "wq" in key or "wk" in key or "wv" in key or "wo" in key:
+ key = key.replace("wq", "query_proj")
+ key = key.replace("wk", "key_proj")
+ key = key.replace("wv", "value_proj")
+ key = key.replace("wo", "out_proj")
+
+ elif "w1" in key or "w2" in key or "w3" in key:
+ # The FFN is a separate submodule in PyTorch
+ key = key.replace("feed_forward.w1", "linear1")
+ key = key.replace("feed_forward.w3", "linear2")
+ key = key.replace("feed_forward.w2", "linear3")
+
+ elif "output" in key:
+ key = key.replace("output", "out_proj")
+
+ elif "rope" in key:
+ return None, None
+
+ return key, value.numpy()
+
+
+ if __name__ == "__main__":
+ parser = argparse.ArgumentParser(description="Convert Llama weights to MLX")
+ parser.add_argument("torch_weights")
+ parser.add_argument("output_file")
+ args = parser.parse_args()
+
+ state = torch.load(args.torch_weights)
+ np.savez(
+ args.output_file,
+ **{k: v for k, v in starmap(map_torch_to_mlx, state.items()) if k is not None}
+ )
+
+
+Weight loading and benchmarking
+-------------------------------
+
+After converting the weights to be compatible to our implementation, all that is
+left is to load them from disk and we can finally use the LLM to generate text.
+We can load numpy format files using the :func:`mlx.core.load` operation.
+
+To create a parameter dictionary from the key/value representation of NPZ files
+we will use the :func:`mlx.utils.tree_unflatten` helper method as follows:
+
+.. code-block:: python
+
+ from mlx.utils import tree_unflatten
+
+ model.update(tree_unflatten(list(mx.load(weight_file).items())))
+
+:meth:`mlx.utils.tree_unflatten` will take keys from the NPZ file that look
+like ``layers.2.attention.query_proj.weight`` and will transform them to
+
+.. code-block:: python
+
+ {"layers": [..., ..., {"attention": {"query_proj": {"weight": ...}}}]}
+
+which can then be used to update the model. Note that the method above incurs
+several unnecessary copies from disk to numpy and then from numpy to MLX. It
+will be replaced in the future with direct loading to MLX.
+
+You can download the full example code in `mlx-examples `_. Assuming, the
+existence of ``weights.pth`` and ``tokenizer.model`` in the current working
+directory we can play around with our inference script as follows (the timings
+are representative of an M1 Ultra and the 7B parameter Llama model):
+
+.. code-block:: bash
+
+ $ python convert.py weights.pth llama-7B.mlx.npz
+ $ python llama.py llama-7B.mlx.npz tokenizer.model 'Call me Ishmael. Some years ago never mind how long precisely'
+ [INFO] Loading model from disk: 5.247 s
+ Press enter to start generation
+ ------
+ , having little or no money in my purse, and nothing of greater consequence in my mind, I happened to be walking down Gower Street in the afternoon, in the heavy rain, and I saw a few steps off, a man in rags, who sat upon his bundle and looked hard into the wet as if he were going to cry. I watched him attentively for some time, and could not but observe that, though a numerous crowd was hurrying up and down,
+ ------
+ [INFO] Prompt processing: 0.437 s
+ [INFO] Full generation: 4.330 s
+
+We observe that 4.3 seconds are required to generate 100 tokens and 0.4 seconds
+of those are spent processing the prompt. This amounts to a little over **39 ms
+per token**.
+
+By running with a much bigger prompt we can see that the per token generation
+time as well as the prompt processing time remains almost constant.
+
+.. code-block:: bash
+
+ $ python llama.py llama-7B.mlx.npz tokenizer.model 'Call me Ishmael. Some years ago never mind how long precisely, having little or no money in my purse, and nothing of greater consequence in my mind, I happened to be walking down Gower Street in the afternoon, in the heavy rain, and I saw a few steps off, a man in rags, who sat upon his bundle and looked hard into the wet as if he were going to cry. I watched him attentively for some time, and could not but observe that, though a numerous crowd was hurrying up and down, nobody took the least notice of him. I stopped at last, at a little distance, as if I had been in doubt, and after looking on a few minutes, walked straight up to him. He slowly raised his eyes, and fixed them upon me for a moment, without speaking, and then resumed his place and posture as before. I stood looking at him for a while, feeling very much pain at heart, and then said to him, “What are you doing there?” Something like a smile passed over his face, as he said slowly, “I am waiting for someone; but it has been three quarters of an hour now, and he has not come.” “What is it you are waiting for?” said I. Still he made no immediate reply, but again put his face down upon his hands, and did not'
+ [INFO] Loading model from disk: 5.247 s
+ Press enter to start generation
+ ------
+ take his eyes from the ground. “What is it you are waiting for?” said I. “I am not accustomed to be thus questioned,” said he. “You look like a reasonable man—tell me, then, what are you waiting for?” “You would not understand,” he replied; “and how could you help me, if I were to tell you?” “I should not only understand, but would do all that I could,” said I. He did not
+ ------
+ [INFO] Prompt processing: 0.579 s
+ [INFO] Full generation: 4.690 s
+ $ python llama.py --num-tokens 500 llama-7B.mlx.npz tokenizer.model 'Call me Ishmael. Some years ago never mind how long precisely, having little or no money in my purse, and nothing of greater consequence in my mind, I happened to be walking down Gower Street in the afternoon, in the heavy rain, and I saw a few steps off, a man in rags, who sat upon his bundle and looked hard into the wet as if he were going to cry. I watched him attentively for some time, and could not but observe that, though a numerous crowd was hurrying up and down, nobody took the least notice of him. I stopped at last, at a little distance, as if I had been in doubt, and after looking on a few minutes, walked straight up to him. He slowly raised his eyes, and fixed them upon me for a moment, without speaking, and then resumed his place and posture as before. I stood looking at him for a while, feeling very much pain at heart, and then said to him, “What are you doing there?” Something like a smile passed over his face, as he said slowly, “I am waiting for someone; but it has been three quarters of an hour now, and he has not come.” “What is it you are waiting for?” said I. Still he made no immediate reply, but again put his face down upon his hands, and did not'
+ [INFO] Loading model from disk: 5.628 s
+ Press enter to start generation
+ ------
+ take his eyes from the ground. “What is it you are waiting for?” said I. “I am not accustomed to be thus questioned,” said he. “You look like a reasonable man—tell me, then, what are you waiting for?” “You would not understand,” he replied; “and how could you help me, if I were to tell you?” “I should not only understand, but would do all that I could,” said I. He did not reply, but still went on looking at the ground, and took hold of his bundle with a nervous trembling. I waited some time, and then resumed. “It is of no use to say you would not understand, if I were to tell you,” said he. “I have not told you why I am waiting for him,” said I. “And I am sure I should not understand,” replied he. “I will tell you then,” said I, “and, perhaps, you would not be surprised.” “No matter,” said he, “I shall be surprised anyhow; so tell me why you are waiting for him.” “He is my friend,” said I. “Yes,” said he, with a slight smile, “I know.” “He has been kind to me,” said I, “and I am waiting for him. I want to see him, and could have waited as I am now, for a much longer time.” “He will not soon come,” said he. “Unless he sees you here, he will not know of your having waited, and he will be very unlikely to come.” “No matter,” said I, “I shall wait for him.” “This is a strange thing,” said he, still with the same amused smile. “How did you know,” said I, “that he was coming? How should you be waiting?” “That is my secret,” said he. “And you expect him?” “Yes,” said I. “Are you disappointed then, if he does not come?” “No,” said I, “it is his secret, not mine.” “If he comes,” said he, “do you mean to go straight away?” “Yes,” said I, “I cannot be happy if I do not go straight away after him.” “Did you know this place before?” asked he. “Yes,” said I. “Is there any shop to buy food here?” “
+ ------
+ [INFO] Prompt processing: 0.633 s
+ [INFO] Full generation: 21.475 s
+
+Scripts
+-------
+
+.. admonition:: Download the code
+
+ The full example code is available in `mlx-examples `_.
+
+.. code: `https://github.com/ml-explore/mlx-examples/tree/main/llama`_
+
+.. [1] Su, J., Lu, Y., Pan, S., Murtadha, A., Wen, B. and Liu, Y., 2021.
+ Roformer: Enhanced transformer with rotary position embedding. arXiv
+ preprint arXiv:2104.09864.
+.. [2] Zhang, B. and Sennrich, R., 2019. Root mean square layer normalization.
+ Advances in Neural Information Processing Systems, 32.
+.. [3] Shazeer, N., 2020. Glu variants improve transformer. arXiv preprint
+ arXiv:2002.05202.
diff --git a/docs/build/html/_sources/examples/mlp.rst.txt b/docs/build/html/_sources/examples/mlp.rst.txt
new file mode 100644
index 000000000..5763eeba0
--- /dev/null
+++ b/docs/build/html/_sources/examples/mlp.rst.txt
@@ -0,0 +1,131 @@
+.. _mlp:
+
+Multi-Layer Perceptron
+----------------------
+
+In this example we'll learn to use ``mlx.nn`` by implementing a simple
+multi-layer perceptron to classify MNIST.
+
+As a first step import the MLX packages we need:
+
+.. code-block:: python
+
+ import mlx.core as mx
+ import mlx.nn as nn
+ import mlx.optimizers as optim
+
+ import numpy as np
+
+
+The model is defined as the ``MLP`` class which inherits from
+:class:`mlx.nn.Module`. We follow the standard idiom to make a new module:
+
+1. Define an ``__init__`` where the parameters and/or submodules are setup. See
+ the :ref:`Module class docs` for more information on how
+ :class:`mlx.nn.Module` registers parameters.
+2. Define a ``__call__`` where the computation is implemented.
+
+.. code-block:: python
+
+ class MLP(nn.Module):
+ def __init__(
+ self, num_layers: int, input_dim: int, hidden_dim: int, output_dim: int
+ ):
+ super().__init__()
+ layer_sizes = [input_dim] + [hidden_dim] * num_layers + [output_dim]
+ self.layers = [
+ nn.Linear(idim, odim)
+ for idim, odim in zip(layer_sizes[:-1], layer_sizes[1:])
+ ]
+
+ def __call__(self, x):
+ for l in self.layers[:-1]:
+ x = mx.maximum(l(x), 0.0)
+ return self.layers[-1](x)
+
+
+We define the loss function which takes the mean of the per-example cross
+entropy loss. The ``mlx.nn.losses`` sub-package has implementations of some
+commonly used loss functions.
+
+.. code-block:: python
+
+ def loss_fn(model, X, y):
+ return mx.mean(nn.losses.cross_entropy(model(X), y))
+
+We also need a function to compute the accuracy of the model on the validation
+set:
+
+.. code-block:: python
+
+ def eval_fn(model, X, y):
+ return mx.mean(mx.argmax(model(X), axis=1) == y)
+
+Next, setup the problem parameters and load the data:
+
+.. code-block:: python
+
+ num_layers = 2
+ hidden_dim = 32
+ num_classes = 10
+ batch_size = 256
+ num_epochs = 10
+ learning_rate = 1e-1
+
+ # Load the data
+ import mnist
+ train_images, train_labels, test_images, test_labels = map(
+ mx.array, mnist.mnist()
+ )
+
+Since we're using SGD, we need an iterator which shuffles and constructs
+minibatches of examples in the training set:
+
+.. code-block:: python
+
+ def batch_iterate(batch_size, X, y):
+ perm = mx.array(np.random.permutation(y.size))
+ for s in range(0, y.size, batch_size):
+ ids = perm[s : s + batch_size]
+ yield X[ids], y[ids]
+
+
+Finally, we put it all together by instantiating the model, the
+:class:`mlx.optimizers.SGD` optimizer, and running the training loop:
+
+.. code-block:: python
+
+ # Load the model
+ model = MLP(num_layers, train_images.shape[-1], hidden_dim, num_classes)
+ mx.eval(model.parameters())
+
+ # Get a function which gives the loss and gradient of the
+ # loss with respect to the model's trainable parameters
+ loss_and_grad_fn = nn.value_and_grad(model, loss_fn)
+
+ # Instantiate the optimizer
+ optimizer = optim.SGD(learning_rate=learning_rate)
+
+ for e in range(num_epochs):
+ for X, y in batch_iterate(batch_size, train_images, train_labels):
+ loss, grads = loss_and_grad_fn(model, X, y)
+
+ # Update the optimizer state and model parameters
+ # in a single call
+ optimizer.update(model, grads)
+
+ # Force a graph evaluation
+ mx.eval(model.parameters(), optimizer.state)
+
+ accuracy = eval_fn(model, test_images, test_labels)
+ print(f"Epoch {e}: Test accuracy {accuracy.item():.3f}")
+
+
+.. note::
+ The :func:`mlx.nn.value_and_grad` function is a convenience function to get
+ the gradient of a loss with respect to the trainable parameters of a model.
+ This should not be confused with :func:`mlx.core.value_and_grad`.
+
+The model should train to a decent accuracy (about 95%) after just a few passes
+over the training set. The `full example `_
+is available in the MLX GitHub repo.
diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt
new file mode 100644
index 000000000..a5bf3e9a2
--- /dev/null
+++ b/docs/build/html/_sources/index.rst.txt
@@ -0,0 +1,49 @@
+MLX
+===
+
+.. toctree::
+ :caption: Install
+ :maxdepth: 1
+
+ install
+
+.. toctree::
+ :caption: Usage
+ :maxdepth: 1
+
+ quick_start
+ using_streams
+
+.. toctree::
+ :caption: Examples
+ :maxdepth: 1
+
+ examples/linear_regression
+ examples/mlp
+ examples/llama-inference
+
+.. toctree::
+ :caption: Further Reading
+ :maxdepth: 1
+
+ dev/extensions
+
+.. toctree::
+ :caption: Python API Reference
+ :maxdepth: 1
+
+ python/array
+ python/devices_and_streams
+ python/ops
+ python/random
+ python/transforms
+ python/fft
+ python/nn
+ python/optimizers
+ python/tree_utils
+
+.. toctree::
+ :caption: C++ API Reference
+ :maxdepth: 1
+
+ cpp/ops
diff --git a/docs/build/html/_sources/install.rst.txt b/docs/build/html/_sources/install.rst.txt
new file mode 100644
index 000000000..fd4f9becd
--- /dev/null
+++ b/docs/build/html/_sources/install.rst.txt
@@ -0,0 +1,102 @@
+Build and Install
+=================
+
+Install from PyPI
+-----------------
+
+MLX is available at Apple's internal PyPI repository. All you have to do to use
+MLX with your own Apple silicon computer is
+
+.. code-block:: shell
+
+ pip install apple-mlx -i https://pypi.apple.com/simple
+
+Build from source
+-----------------
+
+Build Requirements
+^^^^^^^^^^^^^^^^^^
+
+- A C++ compiler with C++17 support (e.g. Clang >= 5.0)
+- `cmake `_ -- version 3.24 or later, and ``make``
+
+
+Python API
+^^^^^^^^^^
+
+To build and install the MLX python library from source, first, clone MLX from
+`its GitHub repo `_:
+
+.. code-block:: shell
+
+ git clone git@github.com:ml-explore/mlx.git mlx && cd mlx
+
+Make sure that you have `pybind11 `_
+installed. You can install ``pybind11`` with ``pip``, ``brew`` or ``conda`` as follows:
+
+.. code-block:: shell
+
+ pip install "pybind11[global]"
+ conda install pybind11
+ brew install pybind11
+
+Then simply build and install it using pip:
+
+.. code-block:: shell
+
+ env CMAKE_BUILD_PARALLEL_LEVEL="" pip install .
+
+
+C++ API
+^^^^^^^
+
+Currently, MLX must be built and installed from source.
+
+Similarly to the python library, to build and install the MLX C++ library start
+by cloning MLX from `its GitHub repo
+`_:
+
+.. code-block:: shell
+
+ git clone git@github.com:ml-explore/mlx.git mlx && cd mlx
+
+Create a build directory and run CMake and make:
+
+.. code-block:: shell
+
+ mkdir -p build && cd build
+ cmake .. && make -j
+
+Run tests with:
+
+.. code-block:: shell
+
+ make test
+
+Install with:
+
+.. code-block:: shell
+
+ make install
+
+Note that the built ``mlx.metallib`` file should be either at the same
+directory as the executable statically linked to ``libmlx.a`` or the
+preprocessor constant ``METAL_PATH`` should be defined at build time and it
+should point to the path to the built metal library.
+
+.. list-table:: Build Options
+ :widths: 25 8
+ :header-rows: 1
+
+ * - Option
+ - Default
+ * - MLX_BUILD_TESTS
+ - ON
+ * - MLX_BUILD_EXAMPLES
+ - OFF
+ * - MLX_BUILD_BENCHMARKS
+ - OFF
+ * - MLX_BUILD_METAL
+ - ON
+ * - MLX_BUILD_PYTHON_BINDINGS
+ - OFF
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.Device.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.Device.rst.txt
new file mode 100644
index 000000000..eafe9082b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.Device.rst.txt
@@ -0,0 +1,28 @@
+mlx.core.Device
+===============
+
+.. currentmodule:: mlx.core
+
+.. autoclass:: Device
+
+
+ .. automethod:: __init__
+
+
+ .. rubric:: Methods
+
+ .. autosummary::
+
+ ~Device.__init__
+
+
+
+
+
+ .. rubric:: Attributes
+
+ .. autosummary::
+
+ ~Device.type
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.Dtype.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.Dtype.rst.txt
new file mode 100644
index 000000000..2ca0ac412
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.Dtype.rst.txt
@@ -0,0 +1,28 @@
+mlx.core.Dtype
+==============
+
+.. currentmodule:: mlx.core
+
+.. autoclass:: Dtype
+
+
+ .. automethod:: __init__
+
+
+ .. rubric:: Methods
+
+ .. autosummary::
+
+ ~Dtype.__init__
+
+
+
+
+
+ .. rubric:: Attributes
+
+ .. autosummary::
+
+ ~Dtype.size
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.Stream.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.Stream.rst.txt
new file mode 100644
index 000000000..14a00e70b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.Stream.rst.txt
@@ -0,0 +1,28 @@
+mlx.core.Stream
+===============
+
+.. currentmodule:: mlx.core
+
+.. autoclass:: Stream
+
+
+ .. automethod:: __init__
+
+
+ .. rubric:: Methods
+
+ .. autosummary::
+
+ ~Stream.__init__
+
+
+
+
+
+ .. rubric:: Attributes
+
+ .. autosummary::
+
+ ~Stream.device
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.abs.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.abs.rst.txt
new file mode 100644
index 000000000..90eca6f80
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.abs.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.abs
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: abs
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.add.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.add.rst.txt
new file mode 100644
index 000000000..291a4dcb6
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.add.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.add
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: add
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.all.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.all.rst.txt
new file mode 100644
index 000000000..77a7722eb
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.all.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.all
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: all
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.allclose.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.allclose.rst.txt
new file mode 100644
index 000000000..db268abac
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.allclose.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.allclose
+=================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: allclose
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.any.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.any.rst.txt
new file mode 100644
index 000000000..e7f8e2db1
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.any.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.any
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: any
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.arange.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.arange.rst.txt
new file mode 100644
index 000000000..6521b8bc4
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.arange.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.arange
+===============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: arange
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.arccos.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.arccos.rst.txt
new file mode 100644
index 000000000..5474960fe
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.arccos.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.arccos
+===============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: arccos
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.arccosh.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.arccosh.rst.txt
new file mode 100644
index 000000000..1925cef6f
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.arccosh.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.arccosh
+================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: arccosh
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.arcsin.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.arcsin.rst.txt
new file mode 100644
index 000000000..c78d675df
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.arcsin.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.arcsin
+===============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: arcsin
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.arcsinh.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.arcsinh.rst.txt
new file mode 100644
index 000000000..dc25a7f61
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.arcsinh.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.arcsinh
+================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: arcsinh
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.arctan.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.arctan.rst.txt
new file mode 100644
index 000000000..d132be2d4
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.arctan.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.arctan
+===============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: arctan
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.arctanh.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.arctanh.rst.txt
new file mode 100644
index 000000000..174616e82
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.arctanh.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.arctanh
+================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: arctanh
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.argmax.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.argmax.rst.txt
new file mode 100644
index 000000000..925d39c3a
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.argmax.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.argmax
+===============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: argmax
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.argmin.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.argmin.rst.txt
new file mode 100644
index 000000000..0f0696b9f
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.argmin.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.argmin
+===============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: argmin
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.argpartition.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.argpartition.rst.txt
new file mode 100644
index 000000000..51ac000b9
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.argpartition.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.argpartition
+=====================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: argpartition
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.argsort.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.argsort.rst.txt
new file mode 100644
index 000000000..0353eeae4
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.argsort.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.argsort
+================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: argsort
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.T.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.T.rst.txt
new file mode 100644
index 000000000..4008a16cc
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.T.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.T
+================
+
+.. currentmodule:: mlx.core
+
+.. autoproperty:: array.T
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.abs.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.abs.rst.txt
new file mode 100644
index 000000000..9374238e7
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.abs.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.abs
+==================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.abs
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.all.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.all.rst.txt
new file mode 100644
index 000000000..8ca4f0a4a
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.all.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.all
+==================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.all
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.any.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.any.rst.txt
new file mode 100644
index 000000000..c24700a61
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.any.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.any
+==================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.any
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.argmax.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.argmax.rst.txt
new file mode 100644
index 000000000..4e0aa26a6
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.argmax.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.argmax
+=====================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.argmax
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.argmin.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.argmin.rst.txt
new file mode 100644
index 000000000..aa2061e72
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.argmin.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.argmin
+=====================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.argmin
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.astype.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.astype.rst.txt
new file mode 100644
index 000000000..9370e618a
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.astype.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.astype
+=====================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.astype
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.cos.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.cos.rst.txt
new file mode 100644
index 000000000..dec25f11d
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.cos.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.cos
+==================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.cos
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.dtype.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.dtype.rst.txt
new file mode 100644
index 000000000..ad99ac69a
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.dtype.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.dtype
+====================
+
+.. currentmodule:: mlx.core
+
+.. autoproperty:: array.dtype
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.exp.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.exp.rst.txt
new file mode 100644
index 000000000..e837cd4ad
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.exp.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.exp
+==================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.exp
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.item.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.item.rst.txt
new file mode 100644
index 000000000..a592384c9
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.item.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.item
+===================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.item
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.log.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.log.rst.txt
new file mode 100644
index 000000000..cb28c3022
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.log.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.log
+==================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.log
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.log1p.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.log1p.rst.txt
new file mode 100644
index 000000000..315678f81
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.log1p.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.log1p
+====================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.log1p
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.logsumexp.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.logsumexp.rst.txt
new file mode 100644
index 000000000..31e060adc
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.logsumexp.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.logsumexp
+========================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.logsumexp
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.max.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.max.rst.txt
new file mode 100644
index 000000000..52cc1312c
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.max.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.max
+==================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.max
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.mean.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.mean.rst.txt
new file mode 100644
index 000000000..b871a0abb
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.mean.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.mean
+===================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.mean
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.min.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.min.rst.txt
new file mode 100644
index 000000000..ae971e61a
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.min.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.min
+==================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.min
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.ndim.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.ndim.rst.txt
new file mode 100644
index 000000000..f351249cd
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.ndim.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.ndim
+===================
+
+.. currentmodule:: mlx.core
+
+.. autoproperty:: array.ndim
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.prod.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.prod.rst.txt
new file mode 100644
index 000000000..b0779ebdd
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.prod.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.prod
+===================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.prod
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.reciprocal.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.reciprocal.rst.txt
new file mode 100644
index 000000000..c91a799fd
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.reciprocal.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.reciprocal
+=========================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.reciprocal
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.reshape.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.reshape.rst.txt
new file mode 100644
index 000000000..7925714c2
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.reshape.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.reshape
+======================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.reshape
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.rsqrt.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.rsqrt.rst.txt
new file mode 100644
index 000000000..5c35f68a5
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.rsqrt.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.rsqrt
+====================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.rsqrt
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.rst.txt
new file mode 100644
index 000000000..21e66b5e4
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.rst.txt
@@ -0,0 +1,66 @@
+mlx.core.array
+==============
+
+.. currentmodule:: mlx.core
+
+.. autoclass:: array
+
+
+ .. automethod:: __init__
+
+
+ .. rubric:: Methods
+
+ .. autosummary::
+
+ ~array.__init__
+ ~array.abs
+ ~array.all
+ ~array.any
+ ~array.argmax
+ ~array.argmin
+ ~array.astype
+ ~array.cos
+ ~array.cummax
+ ~array.cummin
+ ~array.cumprod
+ ~array.cumsum
+ ~array.exp
+ ~array.item
+ ~array.log
+ ~array.log10
+ ~array.log1p
+ ~array.log2
+ ~array.logsumexp
+ ~array.max
+ ~array.mean
+ ~array.min
+ ~array.prod
+ ~array.reciprocal
+ ~array.reshape
+ ~array.rsqrt
+ ~array.sin
+ ~array.split
+ ~array.sqrt
+ ~array.square
+ ~array.squeeze
+ ~array.sum
+ ~array.tolist
+ ~array.transpose
+ ~array.var
+
+
+
+
+
+ .. rubric:: Attributes
+
+ .. autosummary::
+
+ ~array.T
+ ~array.dtype
+ ~array.ndim
+ ~array.shape
+ ~array.size
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.shape.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.shape.rst.txt
new file mode 100644
index 000000000..56eeb06bc
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.shape.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.shape
+====================
+
+.. currentmodule:: mlx.core
+
+.. autoproperty:: array.shape
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.sin.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.sin.rst.txt
new file mode 100644
index 000000000..1b6810c8b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.sin.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.sin
+==================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.sin
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.size.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.size.rst.txt
new file mode 100644
index 000000000..8409fe262
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.size.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.size
+===================
+
+.. currentmodule:: mlx.core
+
+.. autoproperty:: array.size
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.split.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.split.rst.txt
new file mode 100644
index 000000000..76fd5ac8c
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.split.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.split
+====================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.split
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.sqrt.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.sqrt.rst.txt
new file mode 100644
index 000000000..636867649
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.sqrt.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.sqrt
+===================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.sqrt
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.square.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.square.rst.txt
new file mode 100644
index 000000000..d543174c0
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.square.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.square
+=====================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.square
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.sum.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.sum.rst.txt
new file mode 100644
index 000000000..456efc544
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.sum.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.sum
+==================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.sum
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.tolist.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.tolist.rst.txt
new file mode 100644
index 000000000..0d8cdfaa0
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.tolist.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.tolist
+=====================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.tolist
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.transpose.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.transpose.rst.txt
new file mode 100644
index 000000000..1c3845feb
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.transpose.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.transpose
+========================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.transpose
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array.var.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array.var.rst.txt
new file mode 100644
index 000000000..6d43ec8d6
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array.var.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array.var
+==================
+
+.. currentmodule:: mlx.core
+
+.. automethod:: array.var
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.array_equal.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.array_equal.rst.txt
new file mode 100644
index 000000000..09d8e25bb
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.array_equal.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.array\_equal
+=====================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: array_equal
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.broadcast_to.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.broadcast_to.rst.txt
new file mode 100644
index 000000000..a938ea97d
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.broadcast_to.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.broadcast\_to
+======================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: broadcast_to
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.concatenate.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.concatenate.rst.txt
new file mode 100644
index 000000000..4352200e8
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.concatenate.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.concatenate
+====================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: concatenate
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.conv1d.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.conv1d.rst.txt
new file mode 100644
index 000000000..47c9d78df
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.conv1d.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.conv1d
+===============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: conv1d
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.conv2d.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.conv2d.rst.txt
new file mode 100644
index 000000000..694185321
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.conv2d.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.conv2d
+===============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: conv2d
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.convolve.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.convolve.rst.txt
new file mode 100644
index 000000000..975dc71b3
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.convolve.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.convolve
+=================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: convolve
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.cos.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.cos.rst.txt
new file mode 100644
index 000000000..a3fa49a78
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.cos.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.cos
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: cos
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.cosh.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.cosh.rst.txt
new file mode 100644
index 000000000..39437cfb7
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.cosh.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.cosh
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: cosh
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.default_device.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.default_device.rst.txt
new file mode 100644
index 000000000..21affc69d
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.default_device.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.default\_device
+========================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: default_device
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.default_stream.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.default_stream.rst.txt
new file mode 100644
index 000000000..96b7d41ee
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.default_stream.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.default\_stream
+========================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: default_stream
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.divide.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.divide.rst.txt
new file mode 100644
index 000000000..7fe60717e
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.divide.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.divide
+===============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: divide
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.equal.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.equal.rst.txt
new file mode 100644
index 000000000..f61f1189e
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.equal.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.equal
+==============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: equal
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.erf.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.erf.rst.txt
new file mode 100644
index 000000000..6682cd23a
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.erf.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.erf
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: erf
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.erfinv.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.erfinv.rst.txt
new file mode 100644
index 000000000..0dde3b21c
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.erfinv.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.erfinv
+===============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: erfinv
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.eval.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.eval.rst.txt
new file mode 100644
index 000000000..5b2891980
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.eval.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.eval
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: eval
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.exp.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.exp.rst.txt
new file mode 100644
index 000000000..a70ea5d15
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.exp.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.exp
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: exp
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.expand_dims.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.expand_dims.rst.txt
new file mode 100644
index 000000000..704825958
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.expand_dims.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.expand\_dims
+=====================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: expand_dims
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.fft.fft.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.fft.rst.txt
new file mode 100644
index 000000000..62c8eeb7f
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.fft.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.fft.fft
+================
+
+.. currentmodule:: mlx.core.fft
+
+.. autofunction:: fft
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.fft.fft2.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.fft2.rst.txt
new file mode 100644
index 000000000..0f690a7d6
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.fft2.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.fft.fft2
+=================
+
+.. currentmodule:: mlx.core.fft
+
+.. autofunction:: fft2
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.fft.fftn.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.fftn.rst.txt
new file mode 100644
index 000000000..06845adfa
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.fftn.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.fft.fftn
+=================
+
+.. currentmodule:: mlx.core.fft
+
+.. autofunction:: fftn
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.fft.ifft.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.ifft.rst.txt
new file mode 100644
index 000000000..2b9d7f0e4
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.ifft.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.fft.ifft
+=================
+
+.. currentmodule:: mlx.core.fft
+
+.. autofunction:: ifft
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.fft.ifft2.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.ifft2.rst.txt
new file mode 100644
index 000000000..e07f9a409
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.ifft2.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.fft.ifft2
+==================
+
+.. currentmodule:: mlx.core.fft
+
+.. autofunction:: ifft2
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.fft.ifftn.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.ifftn.rst.txt
new file mode 100644
index 000000000..1e9b09941
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.ifftn.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.fft.ifftn
+==================
+
+.. currentmodule:: mlx.core.fft
+
+.. autofunction:: ifftn
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.fft.irfft.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.irfft.rst.txt
new file mode 100644
index 000000000..0a028a59e
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.irfft.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.fft.irfft
+==================
+
+.. currentmodule:: mlx.core.fft
+
+.. autofunction:: irfft
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.fft.irfft2.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.irfft2.rst.txt
new file mode 100644
index 000000000..b638433be
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.irfft2.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.fft.irfft2
+===================
+
+.. currentmodule:: mlx.core.fft
+
+.. autofunction:: irfft2
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.fft.irfftn.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.irfftn.rst.txt
new file mode 100644
index 000000000..6668b2903
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.irfftn.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.fft.irfftn
+===================
+
+.. currentmodule:: mlx.core.fft
+
+.. autofunction:: irfftn
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.fft.rfft.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.rfft.rst.txt
new file mode 100644
index 000000000..a9ab1056d
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.rfft.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.fft.rfft
+=================
+
+.. currentmodule:: mlx.core.fft
+
+.. autofunction:: rfft
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.fft.rfft2.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.rfft2.rst.txt
new file mode 100644
index 000000000..aef04184e
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.rfft2.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.fft.rfft2
+==================
+
+.. currentmodule:: mlx.core.fft
+
+.. autofunction:: rfft2
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.fft.rfftn.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.rfftn.rst.txt
new file mode 100644
index 000000000..95b852f74
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.fft.rfftn.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.fft.rfftn
+==================
+
+.. currentmodule:: mlx.core.fft
+
+.. autofunction:: rfftn
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.full.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.full.rst.txt
new file mode 100644
index 000000000..b4bdd26ea
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.full.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.full
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: full
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.grad.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.grad.rst.txt
new file mode 100644
index 000000000..41e8dadea
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.grad.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.grad
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: grad
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.greater.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.greater.rst.txt
new file mode 100644
index 000000000..db867b536
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.greater.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.greater
+================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: greater
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.greater_equal.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.greater_equal.rst.txt
new file mode 100644
index 000000000..b6b1b0989
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.greater_equal.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.greater\_equal
+=======================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: greater_equal
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.jvp.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.jvp.rst.txt
new file mode 100644
index 000000000..b9f964c8b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.jvp.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.jvp
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: jvp
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.less.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.less.rst.txt
new file mode 100644
index 000000000..a5cf7dd43
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.less.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.less
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: less
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.less_equal.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.less_equal.rst.txt
new file mode 100644
index 000000000..4398665a7
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.less_equal.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.less\_equal
+====================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: less_equal
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.load.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.load.rst.txt
new file mode 100644
index 000000000..d02413969
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.load.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.load
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: load
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.log.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.log.rst.txt
new file mode 100644
index 000000000..21fac68bb
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.log.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.log
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: log
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.log10.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.log10.rst.txt
new file mode 100644
index 000000000..d22e63ac1
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.log10.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.log10
+==============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: log10
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.log1p.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.log1p.rst.txt
new file mode 100644
index 000000000..1331c99f1
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.log1p.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.log1p
+==============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: log1p
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.log2.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.log2.rst.txt
new file mode 100644
index 000000000..4c36e519c
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.log2.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.log2
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: log2
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.logaddexp.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.logaddexp.rst.txt
new file mode 100644
index 000000000..89c747529
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.logaddexp.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.logaddexp
+==================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: logaddexp
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.logical_not.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.logical_not.rst.txt
new file mode 100644
index 000000000..7a83ea811
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.logical_not.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.logical\_not
+=====================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: logical_not
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.logsumexp.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.logsumexp.rst.txt
new file mode 100644
index 000000000..89f6b86e0
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.logsumexp.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.logsumexp
+==================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: logsumexp
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.matmul.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.matmul.rst.txt
new file mode 100644
index 000000000..261ae7fb2
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.matmul.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.matmul
+===============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: matmul
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.max.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.max.rst.txt
new file mode 100644
index 000000000..74c2225e2
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.max.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.max
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: max
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.maximum.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.maximum.rst.txt
new file mode 100644
index 000000000..82485a103
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.maximum.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.maximum
+================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: maximum
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.mean.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.mean.rst.txt
new file mode 100644
index 000000000..1b6bd346d
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.mean.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.mean
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: mean
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.min.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.min.rst.txt
new file mode 100644
index 000000000..4d6350e89
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.min.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.min
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: min
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.minimum.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.minimum.rst.txt
new file mode 100644
index 000000000..c535a3e6e
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.minimum.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.minimum
+================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: minimum
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.multiply.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.multiply.rst.txt
new file mode 100644
index 000000000..93b185dc6
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.multiply.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.multiply
+=================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: multiply
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.negative.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.negative.rst.txt
new file mode 100644
index 000000000..91a2cfbe0
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.negative.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.negative
+=================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: negative
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.new_stream.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.new_stream.rst.txt
new file mode 100644
index 000000000..f8aa5249b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.new_stream.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.new\_stream
+====================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: new_stream
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.ones.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.ones.rst.txt
new file mode 100644
index 000000000..d23dd1037
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.ones.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.ones
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: ones
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.ones_like.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.ones_like.rst.txt
new file mode 100644
index 000000000..6a1b99feb
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.ones_like.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.ones\_like
+===================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: ones_like
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.pad.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.pad.rst.txt
new file mode 100644
index 000000000..e2b9becb6
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.pad.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.pad
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: pad
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.partition.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.partition.rst.txt
new file mode 100644
index 000000000..3a6f78fc7
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.partition.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.partition
+==================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: partition
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.prod.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.prod.rst.txt
new file mode 100644
index 000000000..e64cd3098
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.prod.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.prod
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: prod
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.random.bernoulli.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.random.bernoulli.rst.txt
new file mode 100644
index 000000000..6dd4a2bae
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.random.bernoulli.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.random.bernoulli
+=========================
+
+.. currentmodule:: mlx.core.random
+
+.. autofunction:: bernoulli
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.random.categorical.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.random.categorical.rst.txt
new file mode 100644
index 000000000..b3533743b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.random.categorical.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.random.categorical
+===========================
+
+.. currentmodule:: mlx.core.random
+
+.. autofunction:: categorical
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.random.gumbel.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.random.gumbel.rst.txt
new file mode 100644
index 000000000..d01901fa0
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.random.gumbel.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.random.gumbel
+======================
+
+.. currentmodule:: mlx.core.random
+
+.. autofunction:: gumbel
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.random.key.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.random.key.rst.txt
new file mode 100644
index 000000000..0939c55e0
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.random.key.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.random.key
+===================
+
+.. currentmodule:: mlx.core.random
+
+.. autofunction:: key
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.random.normal.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.random.normal.rst.txt
new file mode 100644
index 000000000..ae23c986d
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.random.normal.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.random.normal
+======================
+
+.. currentmodule:: mlx.core.random
+
+.. autofunction:: normal
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.random.randint.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.random.randint.rst.txt
new file mode 100644
index 000000000..957a85b84
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.random.randint.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.random.randint
+=======================
+
+.. currentmodule:: mlx.core.random
+
+.. autofunction:: randint
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.random.seed.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.random.seed.rst.txt
new file mode 100644
index 000000000..735f72e8a
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.random.seed.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.random.seed
+====================
+
+.. currentmodule:: mlx.core.random
+
+.. autofunction:: seed
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.random.split.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.random.split.rst.txt
new file mode 100644
index 000000000..867611d14
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.random.split.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.random.split
+=====================
+
+.. currentmodule:: mlx.core.random
+
+.. autofunction:: split
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.random.truncated_normal.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.random.truncated_normal.rst.txt
new file mode 100644
index 000000000..c3cc7f4a6
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.random.truncated_normal.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.random.truncated\_normal
+=================================
+
+.. currentmodule:: mlx.core.random
+
+.. autofunction:: truncated_normal
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.random.uniform.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.random.uniform.rst.txt
new file mode 100644
index 000000000..9301d1d20
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.random.uniform.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.random.uniform
+=======================
+
+.. currentmodule:: mlx.core.random
+
+.. autofunction:: uniform
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.reciprocal.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.reciprocal.rst.txt
new file mode 100644
index 000000000..0f6890917
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.reciprocal.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.reciprocal
+===================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: reciprocal
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.reshape.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.reshape.rst.txt
new file mode 100644
index 000000000..a7c5c9694
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.reshape.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.reshape
+================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: reshape
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.rsqrt.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.rsqrt.rst.txt
new file mode 100644
index 000000000..0fa61dc40
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.rsqrt.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.rsqrt
+==============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: rsqrt
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.save.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.save.rst.txt
new file mode 100644
index 000000000..0e1a818b9
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.save.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.save
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: save
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.savez.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.savez.rst.txt
new file mode 100644
index 000000000..80430b269
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.savez.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.savez
+==============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: savez
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.savez_compressed.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.savez_compressed.rst.txt
new file mode 100644
index 000000000..bc3a4e2fd
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.savez_compressed.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.savez\_compressed
+==========================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: savez_compressed
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.set_default_device.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.set_default_device.rst.txt
new file mode 100644
index 000000000..e381fcb7e
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.set_default_device.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.set\_default\_device
+=============================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: set_default_device
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.set_default_stream.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.set_default_stream.rst.txt
new file mode 100644
index 000000000..fd614926b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.set_default_stream.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.set\_default\_stream
+=============================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: set_default_stream
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.sigmoid.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.sigmoid.rst.txt
new file mode 100644
index 000000000..69c020fdd
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.sigmoid.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.sigmoid
+================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: sigmoid
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.sign.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.sign.rst.txt
new file mode 100644
index 000000000..19bf01602
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.sign.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.sign
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: sign
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.sin.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.sin.rst.txt
new file mode 100644
index 000000000..edd0a0d25
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.sin.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.sin
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: sin
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.sinh.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.sinh.rst.txt
new file mode 100644
index 000000000..59889278e
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.sinh.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.sinh
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: sinh
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.softmax.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.softmax.rst.txt
new file mode 100644
index 000000000..241aeec7e
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.softmax.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.softmax
+================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: softmax
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.sort.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.sort.rst.txt
new file mode 100644
index 000000000..d72b031a7
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.sort.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.sort
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: sort
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.split.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.split.rst.txt
new file mode 100644
index 000000000..80d545f03
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.split.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.split
+==============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: split
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.sqrt.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.sqrt.rst.txt
new file mode 100644
index 000000000..5020c386f
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.sqrt.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.sqrt
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: sqrt
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.square.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.square.rst.txt
new file mode 100644
index 000000000..06c6277b9
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.square.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.square
+===============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: square
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.squeeze.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.squeeze.rst.txt
new file mode 100644
index 000000000..7c4b7ae76
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.squeeze.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.squeeze
+================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: squeeze
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.stop_gradient.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.stop_gradient.rst.txt
new file mode 100644
index 000000000..309f02375
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.stop_gradient.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.stop\_gradient
+=======================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: stop_gradient
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.subtract.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.subtract.rst.txt
new file mode 100644
index 000000000..b25e6c50b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.subtract.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.subtract
+=================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: subtract
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.sum.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.sum.rst.txt
new file mode 100644
index 000000000..6800c8c6b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.sum.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.sum
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: sum
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.take.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.take.rst.txt
new file mode 100644
index 000000000..ec6579a79
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.take.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.take
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: take
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.take_along_axis.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.take_along_axis.rst.txt
new file mode 100644
index 000000000..3897da7dc
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.take_along_axis.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.take\_along\_axis
+==========================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: take_along_axis
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.tan.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.tan.rst.txt
new file mode 100644
index 000000000..d4aed157e
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.tan.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.tan
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: tan
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.tanh.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.tanh.rst.txt
new file mode 100644
index 000000000..8251066c0
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.tanh.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.tanh
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: tanh
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.transpose.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.transpose.rst.txt
new file mode 100644
index 000000000..2648d84a7
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.transpose.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.transpose
+==================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: transpose
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.value_and_grad.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.value_and_grad.rst.txt
new file mode 100644
index 000000000..b400a663d
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.value_and_grad.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.value\_and\_grad
+=========================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: value_and_grad
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.var.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.var.rst.txt
new file mode 100644
index 000000000..8217874af
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.var.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.var
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: var
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.vjp.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.vjp.rst.txt
new file mode 100644
index 000000000..6dfc91397
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.vjp.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.vjp
+============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: vjp
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.vmap.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.vmap.rst.txt
new file mode 100644
index 000000000..d937e6071
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.vmap.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.vmap
+=============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: vmap
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.where.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.where.rst.txt
new file mode 100644
index 000000000..fbaa4504a
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.where.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.where
+==============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: where
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.zeros.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.zeros.rst.txt
new file mode 100644
index 000000000..9738ac24b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.zeros.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.zeros
+==============
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: zeros
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.core.zeros_like.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.core.zeros_like.rst.txt
new file mode 100644
index 000000000..8de29dbe5
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.core.zeros_like.rst.txt
@@ -0,0 +1,6 @@
+mlx.core.zeros\_like
+====================
+
+.. currentmodule:: mlx.core
+
+.. autofunction:: zeros_like
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.Conv1d.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.Conv1d.rst.txt
new file mode 100644
index 000000000..c4128b83b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.Conv1d.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.Conv1d
+=============
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: Conv1d
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.Conv2d.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.Conv2d.rst.txt
new file mode 100644
index 000000000..7bd1f08bb
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.Conv2d.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.Conv2d
+=============
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: Conv2d
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.Embedding.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.Embedding.rst.txt
new file mode 100644
index 000000000..ad2f3f2ce
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.Embedding.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.Embedding
+================
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: Embedding
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.GELU.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.GELU.rst.txt
new file mode 100644
index 000000000..c963c84f2
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.GELU.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.GELU
+===========
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: GELU
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.GroupNorm.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.GroupNorm.rst.txt
new file mode 100644
index 000000000..762d9ffea
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.GroupNorm.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.GroupNorm
+================
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: GroupNorm
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.LayerNorm.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.LayerNorm.rst.txt
new file mode 100644
index 000000000..cc0ac117d
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.LayerNorm.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.LayerNorm
+================
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: LayerNorm
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.Linear.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.Linear.rst.txt
new file mode 100644
index 000000000..627e6e6e6
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.Linear.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.Linear
+=============
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: Linear
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.MultiHeadAttention.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.MultiHeadAttention.rst.txt
new file mode 100644
index 000000000..2c3a8fcc1
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.MultiHeadAttention.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.MultiHeadAttention
+=========================
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: MultiHeadAttention
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.RMSNorm.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.RMSNorm.rst.txt
new file mode 100644
index 000000000..474b1355d
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.RMSNorm.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.RMSNorm
+==============
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: RMSNorm
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.ReLU.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.ReLU.rst.txt
new file mode 100644
index 000000000..944917de9
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.ReLU.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.ReLU
+===========
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: ReLU
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.RoPE.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.RoPE.rst.txt
new file mode 100644
index 000000000..392fbab7b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.RoPE.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.RoPE
+===========
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: RoPE
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.Sequential.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.Sequential.rst.txt
new file mode 100644
index 000000000..af6ee04ab
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.Sequential.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.Sequential
+=================
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: Sequential
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.SiLU.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.SiLU.rst.txt
new file mode 100644
index 000000000..85069c9d5
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.SiLU.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.SiLU
+===========
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: SiLU
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.nn.value_and_grad.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.nn.value_and_grad.rst.txt
new file mode 100644
index 000000000..103cb3606
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.nn.value_and_grad.rst.txt
@@ -0,0 +1,6 @@
+mlx.nn.value\_and\_grad
+=======================
+
+.. currentmodule:: mlx.nn
+
+.. autofunction:: value_and_grad
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.optimizers.Adam.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.optimizers.Adam.rst.txt
new file mode 100644
index 000000000..074080ea6
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.optimizers.Adam.rst.txt
@@ -0,0 +1,18 @@
+mlx.optimizers.Adam
+===================
+
+.. currentmodule:: mlx.optimizers
+
+.. autoclass:: Adam
+
+
+
+
+ .. rubric:: Methods
+
+ .. autosummary::
+
+ ~Adam.__init__
+ ~Adam.apply_single
+
+
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.optimizers.Optimizer.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.optimizers.Optimizer.rst.txt
new file mode 100644
index 000000000..613eb02cf
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.optimizers.Optimizer.rst.txt
@@ -0,0 +1,20 @@
+mlx.optimizers.Optimizer
+========================
+
+.. currentmodule:: mlx.optimizers
+
+.. autoclass:: Optimizer
+
+
+
+
+ .. rubric:: Methods
+
+ .. autosummary::
+
+ ~Optimizer.__init__
+ ~Optimizer.apply_gradients
+ ~Optimizer.apply_single
+ ~Optimizer.update
+
+
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.optimizers.OptimizerState.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.optimizers.OptimizerState.rst.txt
new file mode 100644
index 000000000..b319b6d09
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.optimizers.OptimizerState.rst.txt
@@ -0,0 +1,17 @@
+mlx.optimizers.OptimizerState
+=============================
+
+.. currentmodule:: mlx.optimizers
+
+.. autoclass:: OptimizerState
+
+
+
+
+ .. rubric:: Methods
+
+ .. autosummary::
+
+ ~OptimizerState.get
+
+
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.optimizers.SGD.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.optimizers.SGD.rst.txt
new file mode 100644
index 000000000..35a9759ed
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.optimizers.SGD.rst.txt
@@ -0,0 +1,18 @@
+mlx.optimizers.SGD
+==================
+
+.. currentmodule:: mlx.optimizers
+
+.. autoclass:: SGD
+
+
+
+
+ .. rubric:: Methods
+
+ .. autosummary::
+
+ ~SGD.__init__
+ ~SGD.apply_single
+
+
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.utils.tree_flatten.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.utils.tree_flatten.rst.txt
new file mode 100644
index 000000000..554cf3fb4
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.utils.tree_flatten.rst.txt
@@ -0,0 +1,6 @@
+mlx.utils.tree\_flatten
+=======================
+
+.. currentmodule:: mlx.utils
+
+.. autofunction:: tree_flatten
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.utils.tree_map.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.utils.tree_map.rst.txt
new file mode 100644
index 000000000..0475ff44b
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.utils.tree_map.rst.txt
@@ -0,0 +1,6 @@
+mlx.utils.tree\_map
+===================
+
+.. currentmodule:: mlx.utils
+
+.. autofunction:: tree_map
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary/mlx.utils.tree_unflatten.rst.txt b/docs/build/html/_sources/python/_autosummary/mlx.utils.tree_unflatten.rst.txt
new file mode 100644
index 000000000..c8d6aa593
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary/mlx.utils.tree_unflatten.rst.txt
@@ -0,0 +1,6 @@
+mlx.utils.tree\_unflatten
+=========================
+
+.. currentmodule:: mlx.utils
+
+.. autofunction:: tree_unflatten
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.gelu.rst.txt b/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.gelu.rst.txt
new file mode 100644
index 000000000..3e1668eb6
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.gelu.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.gelu
+===========
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: gelu
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.gelu_approx.rst.txt b/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.gelu_approx.rst.txt
new file mode 100644
index 000000000..de08dc88c
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.gelu_approx.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.gelu\_approx
+===================
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: gelu_approx
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.gelu_fast_approx.rst.txt b/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.gelu_fast_approx.rst.txt
new file mode 100644
index 000000000..c84114e6c
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.gelu_fast_approx.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.gelu\_fast\_approx
+=========================
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: gelu_fast_approx
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.relu.rst.txt b/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.relu.rst.txt
new file mode 100644
index 000000000..93a69272a
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.relu.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.relu
+===========
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: relu
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.silu.rst.txt b/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.silu.rst.txt
new file mode 100644
index 000000000..b30c17b06
--- /dev/null
+++ b/docs/build/html/_sources/python/_autosummary_functions/mlx.nn.silu.rst.txt
@@ -0,0 +1,8 @@
+mlx.nn.silu
+===========
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: silu
+
+
\ No newline at end of file
diff --git a/docs/build/html/_sources/python/array.rst.txt b/docs/build/html/_sources/python/array.rst.txt
new file mode 100644
index 000000000..96ddd32b3
--- /dev/null
+++ b/docs/build/html/_sources/python/array.rst.txt
@@ -0,0 +1,45 @@
+.. _array:
+
+Array
+=====
+
+.. currentmodule:: mlx.core
+
+.. autosummary::
+ :toctree: _autosummary
+
+ array
+ array.astype
+ array.item
+ array.tolist
+ array.dtype
+ array.ndim
+ array.shape
+ array.size
+ Dtype
+ array.abs
+ array.all
+ array.any
+ array.argmax
+ array.argmin
+ array.cos
+ array.dtype
+ array.exp
+ array.log
+ array.log1p
+ array.logsumexp
+ array.max
+ array.mean
+ array.min
+ array.prod
+ array.reciprocal
+ array.reshape
+ array.rsqrt
+ array.sin
+ array.split
+ array.sqrt
+ array.square
+ array.sum
+ array.transpose
+ array.T
+ array.var
diff --git a/docs/build/html/_sources/python/data_types.rst.txt b/docs/build/html/_sources/python/data_types.rst.txt
new file mode 100644
index 000000000..cbb5c9a3f
--- /dev/null
+++ b/docs/build/html/_sources/python/data_types.rst.txt
@@ -0,0 +1,52 @@
+.. _data_types:
+
+:orphan:
+
+Data Types
+==========
+
+.. currentmodule:: mlx.core
+
+The default floating point type is ``float32`` and the default integer type is
+``int32``. The table below shows supported values for :obj:`Dtype`.
+
+.. list-table:: Supported Data Types
+ :widths: 5 3 20
+ :header-rows: 1
+
+ * - Type
+ - Bytes
+ - Description
+ * - ``bool_``
+ - 1
+ - Boolean (``True``, ``False``) data type
+ * - ``uint8``
+ - 1
+ - 8-bit unsigned integer
+ * - ``uint16``
+ - 2
+ - 16-bit unsigned integer
+ * - ``uint32``
+ - 4
+ - 32-bit unsigned integer
+ * - ``uint32``
+ - 8
+ - 32-bit unsigned integer
+ * - ``int8``
+ - 1
+ - 8-bit signed integer
+ * - ``int16``
+ - 2
+ - 16-bit signed integer
+ * - ``int32``
+ - 4
+ - 32-bit signed integer
+ * - ``int64``
+ - 8
+ - 64-bit signed integer
+ * - ``float16``
+ - 2
+ - 16-bit float, only available with `ARM C language extensions `_
+ * - ``float32``
+ - 4
+ - 32-bit float
diff --git a/docs/build/html/_sources/python/devices_and_streams.rst.txt b/docs/build/html/_sources/python/devices_and_streams.rst.txt
new file mode 100644
index 000000000..bb9dfae2f
--- /dev/null
+++ b/docs/build/html/_sources/python/devices_and_streams.rst.txt
@@ -0,0 +1,17 @@
+.. _devices_and_streams:
+
+Devices and Streams
+===================
+
+.. currentmodule:: mlx.core
+
+.. autosummary::
+ :toctree: _autosummary
+
+ Device
+ default_device
+ set_default_device
+ Stream
+ default_stream
+ new_stream
+ set_default_stream
diff --git a/docs/build/html/_sources/python/fft.rst.txt b/docs/build/html/_sources/python/fft.rst.txt
new file mode 100644
index 000000000..9e4be084b
--- /dev/null
+++ b/docs/build/html/_sources/python/fft.rst.txt
@@ -0,0 +1,22 @@
+.. _fft:
+
+FFT
+===
+
+.. currentmodule:: mlx.core.fft
+
+.. autosummary::
+ :toctree: _autosummary
+
+ fft
+ ifft
+ fft2
+ ifft2
+ fftn
+ ifftn
+ rfft
+ irfft
+ rfft2
+ irfft2
+ rfftn
+ irfftn
diff --git a/docs/build/html/_sources/python/nn.rst.txt b/docs/build/html/_sources/python/nn.rst.txt
new file mode 100644
index 000000000..114fd8a90
--- /dev/null
+++ b/docs/build/html/_sources/python/nn.rst.txt
@@ -0,0 +1,172 @@
+.. _nn:
+
+.. currentmodule:: mlx.nn
+
+Neural Networks
+===============
+
+Writing arbitrarily complex neural networks in MLX can be done using only
+:class:`mlx.core.array` and :meth:`mlx.core.value_and_grad`. However, this requires the
+user to write again and again the same simple neural network operations as well
+as handle all the parameter state and initialization manually and explicitly.
+
+The module :mod:`mlx.nn` solves this problem by providing an intuitive way of
+composing neural network layers, initializing their parameters, freezing them
+for finetuning and more.
+
+Quick Start with Neural Networks
+---------------------------------
+
+.. code-block:: python
+
+ import mlx.core as mx
+ import mlx.nn as nn
+
+ class MLP(nn.Module):
+ def __init__(self, in_dims: int, out_dims: int):
+ super().__init__()
+
+ self.layers = [
+ nn.Linear(in_dims, 128),
+ nn.Linear(128, 128),
+ nn.Linear(128, out_dims),
+ ]
+
+ def __call__(self, x):
+ for i, l in enumerate(self.layers):
+ x = mx.maximum(x, 0) if i > 0 else x
+ x = l(x)
+ return x
+
+ # The model is created with all its parameters but nothing is initialized
+ # yet because MLX is lazily evaluated
+ mlp = MLP(2, 10)
+
+ # We can access its parameters by calling mlp.parameters()
+ params = mlp.parameters()
+ print(params["layers"][0]["weight"].shape)
+
+ # Printing a parameter will cause it to be evaluated and thus initialized
+ print(params["layers"][0])
+
+ # We can also force evaluate all parameters to initialize the model
+ mx.eval(mlp.parameters())
+
+ # A simple loss function.
+ # NOTE: It doesn't matter how it uses the mlp model. It currently captures
+ # it from the local scope. It could be a positional argument or a
+ # keyword argument.
+ def l2_loss(x, y):
+ y_hat = mlp(x)
+ return (y_hat - y).square().mean()
+
+ # Calling `nn.value_and_grad` instead of `mx.value_and_grad` returns the
+ # gradient with respect to `mlp.trainable_parameters()`
+ loss_and_grad = nn.value_and_grad(mlp, l2_loss)
+
+
+.. _module_class:
+
+The Module Class
+----------------
+
+The workhorse of any neural network library is the :class:`Module` class. In
+MLX the :class:`Module` class is a container of :class:`mlx.core.array` or
+:class:`Module` instances. Its main function is to provide a way to
+recursively **access** and **update** its parameters and those of its
+submodules.
+
+Parameters
+^^^^^^^^^^
+
+A parameter of a module is any public member of type :class:`mlx.core.array` (its
+name should not start with ``_``). It can be arbitrarily nested in other
+:class:`Module` instances or lists and dictionaries.
+
+:meth:`Module.parameters` can be used to extract a nested dictionary with all
+the parameters of a module and its submodules.
+
+A :class:`Module` can also keep track of "frozen" parameters.
+:meth:`Module.trainable_parameters` returns only the subset of
+:meth:`Module.parameters` that is not frozen. When using
+:meth:`mlx.nn.value_and_grad` the gradients returned will be with respect to these
+trainable parameters.
+
+Updating the parameters
+^^^^^^^^^^^^^^^^^^^^^^^
+
+MLX modules allow accessing and updating individual parameters. However, most
+times we need to update large subsets of a module's parameters. This action is
+performed by :meth:`Module.update`.
+
+Value and grad
+--------------
+
+Using a :class:`Module` does not preclude using MLX's high order function
+transformations (:meth:`mlx.core.value_and_grad`, :meth:`mlx.core.grad`, etc.). However,
+these function transformations assume pure functions, namely the parameters
+should be passed as an argument to the function being transformed.
+
+There is an easy pattern to achieve that with MLX modules
+
+.. code-block:: python
+
+ model = ...
+
+ def f(params, other_inputs):
+ model.update(params) # <---- Necessary to make the model use the passed parameters
+ return model(other_inputs)
+
+ f(model.trainable_parameters(), mx.zeros((10,)))
+
+However, :meth:`mlx.nn.value_and_grad` provides precisely this pattern and only
+computes the gradients with respect to the trainable parameters of the model.
+
+In detail:
+
+- it wraps the passed function with a function that calls :meth:`Module.update`
+ to make sure the model is using the provided parameters.
+- it calls :meth:`mlx.core.value_and_grad` to transform the function into a function
+ that also computes the gradients with respect to the passed parameters.
+- it wraps the returned function with a function that passes the trainable
+ parameters as the first argument to the function returned by
+ :meth:`mlx.core.value_and_grad`
+
+.. autosummary::
+ :toctree: _autosummary
+
+ value_and_grad
+
+Neural Network Layers
+---------------------
+
+.. autosummary::
+ :toctree: _autosummary
+ :template: nn-module-template.rst
+
+ Embedding
+ ReLU
+ GELU
+ SiLU
+ Linear
+ Conv1d
+ Conv2d
+ LayerNorm
+ RMSNorm
+ GroupNorm
+ RoPE
+ MultiHeadAttention
+ Sequential
+
+Layers without parameters (e.g. activation functions) are also provided as
+simple functions.
+
+.. autosummary::
+ :toctree: _autosummary_functions
+ :template: nn-module-template.rst
+
+ gelu
+ gelu_approx
+ gelu_fast_approx
+ relu
+ silu
diff --git a/docs/build/html/_sources/python/nn/module.rst.txt b/docs/build/html/_sources/python/nn/module.rst.txt
new file mode 100644
index 000000000..e14ba96f4
--- /dev/null
+++ b/docs/build/html/_sources/python/nn/module.rst.txt
@@ -0,0 +1,7 @@
+mlx.nn.Module
+=============
+
+.. currentmodule:: mlx.nn
+
+.. autoclass:: Module
+ :members:
diff --git a/docs/build/html/_sources/python/ops.rst.txt b/docs/build/html/_sources/python/ops.rst.txt
new file mode 100644
index 000000000..450588536
--- /dev/null
+++ b/docs/build/html/_sources/python/ops.rst.txt
@@ -0,0 +1,94 @@
+.. _ops:
+
+Operations
+==========
+
+.. currentmodule:: mlx.core
+
+.. autosummary::
+ :toctree: _autosummary
+
+ abs
+ add
+ all
+ allclose
+ any
+ arange
+ arccos
+ arccosh
+ arcsin
+ arcsinh
+ arctan
+ arctanh
+ argmax
+ argmin
+ argpartition
+ argsort
+ array_equal
+ broadcast_to
+ concatenate
+ convolve
+ conv1d
+ conv2d
+ cos
+ cosh
+ divide
+ equal
+ erf
+ erfinv
+ exp
+ expand_dims
+ full
+ greater
+ greater_equal
+ less
+ less_equal
+ load
+ log
+ log2
+ log10
+ log1p
+ logaddexp
+ logical_not
+ logsumexp
+ matmul
+ max
+ maximum
+ mean
+ min
+ minimum
+ multiply
+ negative
+ ones
+ ones_like
+ partition
+ pad
+ prod
+ reciprocal
+ reshape
+ rsqrt
+ save
+ savez
+ savez_compressed
+ sigmoid
+ sign
+ sin
+ sinh
+ softmax
+ sort
+ split
+ sqrt
+ square
+ squeeze
+ stop_gradient
+ subtract
+ sum
+ take
+ take_along_axis
+ tan
+ tanh
+ transpose
+ var
+ where
+ zeros
+ zeros_like
diff --git a/docs/build/html/_sources/python/optimizers.rst.txt b/docs/build/html/_sources/python/optimizers.rst.txt
new file mode 100644
index 000000000..7f5d3a067
--- /dev/null
+++ b/docs/build/html/_sources/python/optimizers.rst.txt
@@ -0,0 +1,41 @@
+.. _optimizers:
+
+Optimizers
+==========
+
+The optimizers in MLX can be used both with :mod:`mlx.nn` but also with pure
+:mod:`mlx.core` functions. A typical example involves calling
+:meth:`Optimizer.update` to update a model's parameters based on the loss
+gradients and subsequently calling :func:`mlx.core.eval` to evaluate both the
+model's parameters and the **optimizer state**.
+
+.. code-block:: python
+
+ # Create a model
+ model = MLP(num_layers, train_images.shape[-1], hidden_dim, num_classes)
+ mx.eval(model.parameters())
+
+ # Create the gradient function and the optimizer
+ loss_and_grad_fn = nn.value_and_grad(model, loss_fn)
+ optimizer = optim.SGD(learning_rate=learning_rate)
+
+ for e in range(num_epochs):
+ for X, y in batch_iterate(batch_size, train_images, train_labels):
+ loss, grads = loss_and_grad_fn(model, X, y)
+
+ # Update the model with the gradients. So far no computation has happened.
+ optimizer.update(model, grads)
+
+ # Compute the new parameters but also the optimizer state.
+ mx.eval(model.parameters(), optimizer.state)
+
+.. currentmodule:: mlx.optimizers
+
+.. autosummary::
+ :toctree: _autosummary
+ :template: optimizers-template.rst
+
+ OptimizerState
+ Optimizer
+ SGD
+ Adam
diff --git a/docs/build/html/_sources/python/random.rst.txt b/docs/build/html/_sources/python/random.rst.txt
new file mode 100644
index 000000000..8ac3eaa11
--- /dev/null
+++ b/docs/build/html/_sources/python/random.rst.txt
@@ -0,0 +1,45 @@
+.. _random:
+
+Random
+======
+
+Random sampling functions in MLX use an implicit global PRNG state by default.
+However, all function take an optional ``key`` keyword argument for when more
+fine-grained control or explicit state management is needed.
+
+For example, you can generate random numbers with:
+
+.. code-block:: python
+
+ for _ in range(3):
+ print(mx.random.uniform())
+
+which will print a sequence of unique pseudo random numbers. Alternatively you
+can explicitly set the key:
+
+.. code-block:: python
+
+ key = mx.random.key(0)
+ for _ in range(3):
+ print(mx.random.uniform(key=key))
+
+which will yield the same pseudo random number at each iteration.
+
+Following `JAX's PRNG design `_
+we use a splittable version of Threefry, which is a counter-based PRNG.
+
+.. currentmodule:: mlx.core.random
+
+.. autosummary::
+ :toctree: _autosummary
+
+ seed
+ key
+ split
+ bernoulli
+ categorical
+ gumbel
+ normal
+ randint
+ uniform
+ truncated_normal
diff --git a/docs/build/html/_sources/python/transforms.rst.txt b/docs/build/html/_sources/python/transforms.rst.txt
new file mode 100644
index 000000000..cc8d681d5
--- /dev/null
+++ b/docs/build/html/_sources/python/transforms.rst.txt
@@ -0,0 +1,16 @@
+.. _transforms:
+
+Transforms
+==========
+
+.. currentmodule:: mlx.core
+
+.. autosummary::
+ :toctree: _autosummary
+
+ eval
+ grad
+ value_and_grad
+ jvp
+ vjp
+ vmap
diff --git a/docs/build/html/_sources/python/tree_utils.rst.txt b/docs/build/html/_sources/python/tree_utils.rst.txt
new file mode 100644
index 000000000..84d5afa9b
--- /dev/null
+++ b/docs/build/html/_sources/python/tree_utils.rst.txt
@@ -0,0 +1,21 @@
+.. _utils:
+
+Tree Utils
+==========
+
+In MLX we consider a python tree to be an arbitrarily nested collection of
+dictionaries, lists and tuples without cycles. Functions in this module that
+return python trees will be using the default python ``dict``, ``list`` and
+``tuple`` but they can usually process objects that inherit from any of these.
+
+.. note::
+ Dictionaries should have keys that are valid python identifiers.
+
+.. currentmodule:: mlx.utils
+
+.. autosummary::
+ :toctree: _autosummary
+
+ tree_flatten
+ tree_unflatten
+ tree_map
diff --git a/docs/build/html/_sources/quick_start.rst.txt b/docs/build/html/_sources/quick_start.rst.txt
new file mode 100644
index 000000000..c3e2b678b
--- /dev/null
+++ b/docs/build/html/_sources/quick_start.rst.txt
@@ -0,0 +1,93 @@
+Quick Start Guide
+=================
+
+MLX is a NumPy-like array framework designed for efficient and flexible
+machine learning on Apple silicon. The Python API closely follows NumPy with
+a few exceptions. MLX also has a fully featured C++ API which closely follows
+the Python API.
+
+The main differences between MLX and NumPy are:
+
+ - **Composable function transformations**: MLX has composable function
+ transformations for automatic differentiation, automatic vectorization,
+ and computation graph optimization.
+ - **Lazy computation**: Computations in MLX are lazy. Arrays are only
+ materialized when needed.
+ - **Multi-device**: Operations can run on any of the suppoorted devices (CPU,
+ GPU, ...)
+
+The design of MLX is strongly inspired by frameworks like `PyTorch
+ `_, `Jax `_, and
+`ArrayFire `_. A noteable difference from these
+frameworks and MLX is the *unified memory model*. Arrays in MLX live in shared
+memory. Operations on MLX arrays can be performed on any of the supported
+device types without performing data copies. Currently supported device types
+are the CPU and GPU.
+
+Basics
+------
+
+.. currentmodule:: mlx.core
+
+Import ``mlx.core`` and make an :class:`array`:
+
+.. code-block:: python
+
+ >> import mlx.core as mx
+ >> a = mx.array([1, 2, 3, 4])
+ >> a.shape
+ [4]
+ >> a.dtype
+ int32
+ >> b = mx.array([1.0, 2.0, 3.0, 4.0])
+ >> b.dtype
+ float32
+
+Operations in MLX are lazy. The outputs of MLX operations are not computed
+until they are needed. To force an array to be evaluated use
+:func:`eval`. Arrays will automatically be evaluated in a few cases. For
+example, inspecting a scalar with :meth:`array.item`, printing an array,
+or converting an array from :class:`array` to :class:`numpy.ndarray` all
+automatically evaluate the array.
+
+.. code-block:: python
+
+ >> c = a + b # c not yet evaluated
+ >> mx.eval(c) # evaluates c
+ >> c = a + b
+ >> print(c) # Also evaluates c
+ array([2, 4, 6, 8], dtype=float32)
+ >> c = a + b
+ >> import numpy as np
+ >> np.array(c) # Also evaluates c
+ array([2., 4., 6., 8.], dtype=float32)
+
+Function and Graph Transformations
+----------------------------------
+
+MLX has standard function transformations like :func:`grad` and :func:`vmap`.
+Transformations can be composed arbitrarily. For example
+``grad(vmap(grad(fn)))`` (or any other composition) is allowed.
+
+.. code-block:: python
+
+ >> x = mx.array(0.0)
+ >> mx.sin(x)
+ array(0, dtype=float32)
+ >> mx.grad(mx.sin)(x)
+ array(1, dtype=float32)
+ >> mx.grad(mx.grad(mx.sin))(x)
+ array(-0, dtype=float32)
+
+Other gradient transformations include :func:`vjp` for vector-Jacobian products
+and :func:`jvp` for Jacobian-vector products.
+
+Use :func:`value_and_grad` to efficiently compute both a function's output and
+gradient with respect to the function's input.
+
+
+Devices and Streams
+-------------------
+
+
+
diff --git a/docs/build/html/_sources/using_streams.rst.txt b/docs/build/html/_sources/using_streams.rst.txt
new file mode 100644
index 000000000..7b42e8d4b
--- /dev/null
+++ b/docs/build/html/_sources/using_streams.rst.txt
@@ -0,0 +1,16 @@
+Using Streams
+=============
+
+.. currentmodule:: mlx.core
+
+Specifying the :obj:`Stream`
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+All operations (including random number generation) take an optional
+keyword argument ``stream``. The ``stream`` kwarg specifies which
+:obj:`Stream` the operation should run on. If the stream is unspecified then
+the operation is run on the default stream of the default device:
+``mx.default_stream(mx.default_device())``. The ``stream`` kwarg can also
+be a :obj:`Device` (e.g. ``stream=my_device``) in which case the operation is
+run on the default stream of the provided device
+``mx.default_stream(my_device)``.
diff --git a/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js b/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js
new file mode 100644
index 000000000..8549469dc
--- /dev/null
+++ b/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js
@@ -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;
+}
diff --git a/docs/build/html/_static/basic.css b/docs/build/html/_static/basic.css
new file mode 100644
index 000000000..088967717
--- /dev/null
+++ b/docs/build/html/_static/basic.css
@@ -0,0 +1,930 @@
+/*
+ * 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;
+}
+
+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;
+}
+nav.contents,
+aside.topic,
+
+div.admonition, div.topic, blockquote {
+ clear: left;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+nav.contents,
+aside.topic,
+
+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,
+nav.contents > :last-child,
+aside.topic > :last-child,
+
+div.topic > :last-child,
+div.admonition > :last-child {
+ margin-bottom: 0;
+}
+
+div.sidebar::after,
+aside.sidebar::after,
+nav.contents::after,
+aside.topic::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;
+ }
+}
\ No newline at end of file
diff --git a/docs/build/html/_static/css/badge_only.css b/docs/build/html/_static/css/badge_only.css
new file mode 100644
index 000000000..c718cee44
--- /dev/null
+++ b/docs/build/html/_static/css/badge_only.css
@@ -0,0 +1 @@
+.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}}
\ No newline at end of file
diff --git a/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff b/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff
new file mode 100644
index 000000000..6cb600001
Binary files /dev/null and b/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff differ
diff --git a/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 b/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2
new file mode 100644
index 000000000..7059e2314
Binary files /dev/null and b/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 differ
diff --git a/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff b/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff
new file mode 100644
index 000000000..f815f63f9
Binary files /dev/null and b/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff differ
diff --git a/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 b/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2
new file mode 100644
index 000000000..f2c76e5bd
Binary files /dev/null and b/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 differ
diff --git a/docs/build/html/_static/css/fonts/fontawesome-webfont.eot b/docs/build/html/_static/css/fonts/fontawesome-webfont.eot
new file mode 100644
index 000000000..e9f60ca95
Binary files /dev/null and b/docs/build/html/_static/css/fonts/fontawesome-webfont.eot differ
diff --git a/docs/build/html/_static/css/fonts/fontawesome-webfont.svg b/docs/build/html/_static/css/fonts/fontawesome-webfont.svg
new file mode 100644
index 000000000..855c845e5
--- /dev/null
+++ b/docs/build/html/_static/css/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+
+
+
diff --git a/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf b/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf
new file mode 100644
index 000000000..35acda2fa
Binary files /dev/null and b/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf differ
diff --git a/docs/build/html/_static/css/fonts/fontawesome-webfont.woff b/docs/build/html/_static/css/fonts/fontawesome-webfont.woff
new file mode 100644
index 000000000..400014a4b
Binary files /dev/null and b/docs/build/html/_static/css/fonts/fontawesome-webfont.woff differ
diff --git a/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 b/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2
new file mode 100644
index 000000000..4d13fc604
Binary files /dev/null and b/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 differ
diff --git a/docs/build/html/_static/css/fonts/lato-bold-italic.woff b/docs/build/html/_static/css/fonts/lato-bold-italic.woff
new file mode 100644
index 000000000..88ad05b9f
Binary files /dev/null and b/docs/build/html/_static/css/fonts/lato-bold-italic.woff differ
diff --git a/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 b/docs/build/html/_static/css/fonts/lato-bold-italic.woff2
new file mode 100644
index 000000000..c4e3d804b
Binary files /dev/null and b/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 differ
diff --git a/docs/build/html/_static/css/fonts/lato-bold.woff b/docs/build/html/_static/css/fonts/lato-bold.woff
new file mode 100644
index 000000000..c6dff51f0
Binary files /dev/null and b/docs/build/html/_static/css/fonts/lato-bold.woff differ
diff --git a/docs/build/html/_static/css/fonts/lato-bold.woff2 b/docs/build/html/_static/css/fonts/lato-bold.woff2
new file mode 100644
index 000000000..bb195043c
Binary files /dev/null and b/docs/build/html/_static/css/fonts/lato-bold.woff2 differ
diff --git a/docs/build/html/_static/css/fonts/lato-normal-italic.woff b/docs/build/html/_static/css/fonts/lato-normal-italic.woff
new file mode 100644
index 000000000..76114bc03
Binary files /dev/null and b/docs/build/html/_static/css/fonts/lato-normal-italic.woff differ
diff --git a/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 b/docs/build/html/_static/css/fonts/lato-normal-italic.woff2
new file mode 100644
index 000000000..3404f37e2
Binary files /dev/null and b/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 differ
diff --git a/docs/build/html/_static/css/fonts/lato-normal.woff b/docs/build/html/_static/css/fonts/lato-normal.woff
new file mode 100644
index 000000000..ae1307ff5
Binary files /dev/null and b/docs/build/html/_static/css/fonts/lato-normal.woff differ
diff --git a/docs/build/html/_static/css/fonts/lato-normal.woff2 b/docs/build/html/_static/css/fonts/lato-normal.woff2
new file mode 100644
index 000000000..3bf984332
Binary files /dev/null and b/docs/build/html/_static/css/fonts/lato-normal.woff2 differ
diff --git a/docs/build/html/_static/css/theme.css b/docs/build/html/_static/css/theme.css
new file mode 100644
index 000000000..19a446a0e
--- /dev/null
+++ b/docs/build/html/_static/css/theme.css
@@ -0,0 +1,4 @@
+html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) 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#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.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;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{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}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block}
\ No newline at end of file
diff --git a/docs/build/html/_static/doctools.js b/docs/build/html/_static/doctools.js
new file mode 100644
index 000000000..c3db08d1c
--- /dev/null
+++ b/docs/build/html/_static/doctools.js
@@ -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(
+ '' +
+ '' +
+ Documentation.gettext("Hide Search Matches") +
+ "
"
+ )
+ );
+ },
+
+ /**
+ * 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);
diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js
new file mode 100644
index 000000000..b8457d918
--- /dev/null
+++ b/docs/build/html/_static/documentation_options.js
@@ -0,0 +1,14 @@
+var DOCUMENTATION_OPTIONS = {
+ URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
+ VERSION: '0.0.0',
+ 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,
+};
\ No newline at end of file
diff --git a/docs/build/html/_static/file.png b/docs/build/html/_static/file.png
new file mode 100644
index 000000000..a858a410e
Binary files /dev/null and b/docs/build/html/_static/file.png differ
diff --git a/docs/build/html/_static/jquery-3.6.0.js b/docs/build/html/_static/jquery-3.6.0.js
new file mode 100644
index 000000000..fc6c299b7
--- /dev/null
+++ b/docs/build/html/_static/jquery-3.6.0.js
@@ -0,0 +1,10881 @@
+/*!
+ * jQuery JavaScript Library v3.6.0
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright OpenJS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2021-03-02T17:08Z
+ */
+( function( global, factory ) {
+
+ "use strict";
+
+ if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+ // For CommonJS and CommonJS-like environments where a proper `window`
+ // is present, execute the factory and get jQuery.
+ // For environments that do not have a `window` with a `document`
+ // (such as Node.js), expose a factory as module.exports.
+ // This accentuates the need for the creation of a real `window`.
+ // e.g. var jQuery = require("jquery")(window);
+ // See ticket #14549 for more info.
+ module.exports = global.document ?
+ factory( global, true ) :
+ function( w ) {
+ if ( !w.document ) {
+ throw new Error( "jQuery requires a window with a document" );
+ }
+ return factory( w );
+ };
+ } else {
+ factory( global );
+ }
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var flat = arr.flat ? function( array ) {
+ return arr.flat.call( array );
+} : function( array ) {
+ return arr.concat.apply( [], array );
+};
+
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+var isFunction = function isFunction( obj ) {
+
+ // Support: Chrome <=57, Firefox <=52
+ // In some browsers, typeof returns "function" for HTML