diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index b731e7b5..ad5ce9db 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -7,24 +7,25 @@ jobs: matrix: python-version: ["3.8", "3.9", "3.10", "3.11"] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: recursive - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - - name: dependencies + - name: install + if: always() run: | - cd ${GITHUB_WORKSPACE}/scripts && ./dependencies.sh - - name: lint + cd ${GITHUB_WORKSPACE}/scripts && ./install.sh + - name: format if: always() run: | - cd ${GITHUB_WORKSPACE}/scripts && ./lint.sh - - name: install + cd ${GITHUB_WORKSPACE}/scripts && ./format.sh + - name: lint if: always() run: | - cd ${GITHUB_WORKSPACE}/scripts && ./install.sh + cd ${GITHUB_WORKSPACE}/scripts && ./lint.sh - name: test if: always() run: | diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 9f2bcc78..7c87d187 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -11,25 +11,18 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-20.04] + # macos-13 is an intel runner, macos-14 is apple silicon + os: [ubuntu-latest, windows-latest, macos-13, macos-14] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: recursive - # Used to host cibuildwheel - - uses: actions/setup-python@v3 - - - name: Install cibuildwheel - run: python -m pip install cibuildwheel==2.13.1 - - name: Build wheels - run: python -m cibuildwheel --output-dir wheelhouse - # to supply options, put them in 'env', like: - # env: - # CIBW_SOME_OPTION: value + uses: pypa/cibuildwheel@v2.18.0 - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: + name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }} path: ./wheelhouse/*.whl diff --git a/README.md b/README.md index 1e6616f7..c06bb369 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ![Build status](https://github.com/SINGROUP/dscribe/actions/workflows/actions.yml/badge.svg) [![Coverage Status](https://coveralls.io/repos/github/SINGROUP/dscribe/badge.svg?branch=master)](https://coveralls.io/github/SINGROUP/dscribe?branch=master) -[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) +[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) DScribe is a Python package for transforming atomic structures into fixed-size numerical fingerprints. These fingerprints are often called "descriptors" and diff --git a/devrequirements.txt b/devrequirements.txt deleted file mode 100644 index 8e390f85..00000000 --- a/devrequirements.txt +++ /dev/null @@ -1,9 +0,0 @@ -coverage -black -coveralls -pymatgen -sphinx -sphinx_rtd_theme -sphinxcontrib-bibtex -pybind11 -pytest diff --git a/docs/2.1.x/.buildinfo b/docs/2.1.x/.buildinfo index 5c1deccc..f93375ca 100644 --- a/docs/2.1.x/.buildinfo +++ b/docs/2.1.x/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 979ed1add00f32f4bc116afafadc8e3c +config: d2b1800fed63e4715a5ada69f6a537e2 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/2.1.x/_modules/dscribe/core/lattice.html b/docs/2.1.x/_modules/dscribe/core/lattice.html index c5558450..84456584 100644 --- a/docs/2.1.x/_modules/dscribe/core/lattice.html +++ b/docs/2.1.x/_modules/dscribe/core/lattice.html @@ -1,22 +1,24 @@ - + dscribe.core.lattice — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,10 +99,13 @@

Source code for dscribe.core.lattice

 See the License for the specific language governing permissions and
 limitations under the License.
 """
+
 import numpy as np
 
 
-
[docs]class Lattice(object): +
+[docs] +class Lattice(object): """ A lattice object. Essentially a matrix with conversion matrices. In general, it is assumed that length units are in Angstroms and angles are in @@ -144,7 +149,9 @@

Source code for dscribe.core.lattice

             self._inv_matrix = np.linalg.inv(self._matrix)
         return self._inv_matrix
 
-
[docs] def get_cartesian_coords(self, fractional_coords): +
+[docs] + def get_cartesian_coords(self, fractional_coords): """ Returns the cartesian coordinates given fractional coordinates. @@ -156,7 +163,10 @@

Source code for dscribe.core.lattice

         """
         return np.dot(fractional_coords, self._matrix)
-
[docs] def get_fractional_coords(self, cart_coords): + +
+[docs] + def get_fractional_coords(self, cart_coords): """ Returns the fractional coordinates given cartesian coordinates. @@ -168,6 +178,7 @@

Source code for dscribe.core.lattice

         """
         return np.dot(cart_coords, self.inv_matrix)
+ @property def lengths(self): if self._lengths is None: @@ -206,7 +217,9 @@

Source code for dscribe.core.lattice

         """
         return Lattice(self.reciprocal_lattice.matrix / (2 * np.pi))
 
-
[docs] def get_points_in_sphere(self, frac_points, center, r, zip_results=True): +
+[docs] + def get_points_in_sphere(self, frac_points, center, r, zip_results=True): """ Find all points within a sphere from the point taking into account periodic boundary conditions. This includes sites in other periodic @@ -282,7 +295,9 @@

Source code for dscribe.core.lattice

                 shifted_coords[within_r],
                 np.sqrt(d_2[within_r]),
                 indices[within_r[0]],
-            )
+ )
+
+
diff --git a/docs/2.1.x/_modules/dscribe/core/system.html b/docs/2.1.x/_modules/dscribe/core/system.html index 68a53153..bb24601b 100644 --- a/docs/2.1.x/_modules/dscribe/core/system.html +++ b/docs/2.1.x/_modules/dscribe/core/system.html @@ -1,22 +1,24 @@ - + dscribe.core.system — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,13 +99,16 @@

Source code for dscribe.core.system

 See the License for the specific language governing permissions and
 limitations under the License.
 """
+
 from ase import Atoms
 import ase.geometry
 import numpy as np
 import dscribe.utils.geometry
 
 
-
[docs]class System(Atoms): +
+[docs] +class System(Atoms): """Represents atomic systems that are used internally by the package. Inherits from the ase.Atoms class, but adds the possibility to cache various time-consuming quantities that can be shared when creating multiple @@ -155,7 +160,9 @@

Source code for dscribe.core.system

         self._distance_matrix = None
         self._inverse_distance_matrix = None
 
-
[docs] @staticmethod +
+[docs] + @staticmethod def from_atoms(atoms): """Creates a System object from ASE.Atoms object.""" system = System( @@ -176,13 +183,19 @@

Source code for dscribe.core.system

 
         return system
-
[docs] def get_cell_inverse(self): + +
+[docs] + def get_cell_inverse(self): """Get the matrix inverse of the lattice matrix.""" if self._cell_inverse is None: self._cell_inverse = np.linalg.inv(self.get_cell()) return self._cell_inverse
-
[docs] def to_scaled(self, positions, wrap=False): + +
+[docs] + def to_scaled(self, positions, wrap=False): """Used to transform a set of positions to the basis defined by the cell of this system. @@ -205,7 +218,10 @@

Source code for dscribe.core.system

 
         return fractional
-
[docs] def to_cartesian(self, scaled_positions, wrap=False): + +
+[docs] + def to_cartesian(self, scaled_positions, wrap=False): """Used to transform a set of relative positions to the cartesian basis defined by the cell of this system. @@ -227,7 +243,10 @@

Source code for dscribe.core.system

         cartesian_positions = np.dot(scaled_positions, self.get_cell())
         return cartesian_positions
-
[docs] def get_displacement_tensor(self): + +
+[docs] + def get_displacement_tensor(self): """A matrix where the entry A[i, j, :] is the vector self.cartesian_pos[j] - self.cartesian_pos[i]. @@ -261,7 +280,10 @@

Source code for dscribe.core.system

 
         return self._displacement_tensor
-
[docs] def get_distance_matrix(self): + +
+[docs] + def get_distance_matrix(self): """Calculates the distance matrix A defined as: .. math:: @@ -280,7 +302,10 @@

Source code for dscribe.core.system

             self.get_displacement_tensor()
         return self._distance_matrix
-
[docs] def get_distance_matrix_within_radius( + +
+[docs] + def get_distance_matrix_within_radius( self, radius, pos=None, output_type="coo_matrix" ): """Calculates a sparse distance matrix by only considering distances @@ -303,7 +328,10 @@

Source code for dscribe.core.system

         )
         return dmat
-
[docs] def get_inverse_distance_matrix(self): + +
+[docs] + def get_inverse_distance_matrix(self): """Calculates the inverse distance matrix A defined as: .. math:: @@ -326,22 +354,35 @@

Source code for dscribe.core.system

             self._inverse_distance_matrix = inv_distance_matrix
         return self._inverse_distance_matrix
-
[docs] def set_positions(self, newpositions, apply_constraint=True): + +
+[docs] + def set_positions(self, newpositions, apply_constraint=True): self._reset_structure() super().set_positions(newpositions, apply_constraint)
-
[docs] def set_scaled_positions(self, scaled): + +
+[docs] + def set_scaled_positions(self, scaled): self._reset_structure() super().set_scaled_positions(scaled)
-
[docs] def set_pbc(self, pbc): + +
+[docs] + def set_pbc(self, pbc): self._reset_structure() super().set_pbc(pbc)
-
[docs] def set_cell(self, cell, scale_atoms=False): + +
+[docs] + def set_cell(self, cell, scale_atoms=False): self._reset_structure() super().set_cell(cell, scale_atoms)
+ def _reset_structure(self): """Resets the common structural information that is cached by this object. The caching is done in order to share common structural @@ -351,6 +392,7 @@

Source code for dscribe.core.system

         self._displacement_tensor = None
         self._distance_matrix = None
         self._inverse_distance_matrix = None
+
diff --git a/docs/2.1.x/_modules/dscribe/descriptors/acsf.html b/docs/2.1.x/_modules/dscribe/descriptors/acsf.html index f245a369..48928b8f 100644 --- a/docs/2.1.x/_modules/dscribe/descriptors/acsf.html +++ b/docs/2.1.x/_modules/dscribe/descriptors/acsf.html @@ -1,22 +1,24 @@ - + dscribe.descriptors.acsf — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,19 +99,17 @@

Source code for dscribe.descriptors.acsf

 See the License for the specific language governing permissions and
 limitations under the License.
 """
-import sys
 
 import numpy as np
-import sparse as sp
-from scipy.sparse import coo_matrix
 from ase import Atoms
 
 from dscribe.descriptors.descriptorlocal import DescriptorLocal
 from dscribe.ext import ACSFWrapper
-import dscribe.utils.geometry
 
 
-
[docs]class ACSF(DescriptorLocal): +
+[docs] +class ACSF(DescriptorLocal): """Implementation of Atom-Centered Symmetry Functions. Notice that the species of the central atom is not encoded in the output, @@ -122,7 +122,9 @@

Source code for dscribe.descriptors.acsf

         Physics, 134, 074106 (2011), https://doi.org/10.1063/1.3553717
     """
 
-
[docs] def __init__( +
+[docs] + def __init__( self, r_cut, g2_params=None, @@ -162,17 +164,21 @@

Source code for dscribe.descriptors.acsf

         """
         super().__init__(periodic=periodic, sparse=sparse, dtype=dtype)
 
-        self.acsf_wrapper = ACSFWrapper()
-
-        # Setup
-        self.species = species
-        self.g2_params = g2_params
-        self.g3_params = g3_params
-        self.g4_params = g4_params
-        self.g5_params = g5_params
-        self.r_cut = r_cut
- -
[docs] def create( + self._set_species(species) + self.acsf_wrapper = ACSFWrapper( + self.validate_r_cut(r_cut), + self.validate_g2_params(g2_params), + self.validate_g3_params(g3_params), + self.validate_g4_params(g4_params), + self.validate_g5_params(g5_params), + self._atomic_numbers, + periodic, + )
+ + +
+[docs] + def create( self, system, centers=None, n_jobs=1, only_physical_cores=False, verbose=False ): """Return the ACSF output for the given systems and given centers. @@ -256,7 +262,10 @@

Source code for dscribe.descriptors.acsf

 
         return output
-
[docs] def create_single(self, system, centers=None): + +
+[docs] + def create_single(self, system, centers=None): """Creates the descriptor for the given system. Args: @@ -270,116 +279,53 @@

Source code for dscribe.descriptors.acsf

             first dimension is given by the number of centers and the second
             dimension is determined by the get_number_of_features()-function.
         """
-        # Check if there are types that have not been declared
-        self.check_atomic_numbers(system.get_atomic_numbers())
+        # Validate and normalize system
+        positions = self.validate_positions(system.get_positions())
+        atomic_numbers = self.validate_atomic_numbers(system.get_atomic_numbers())
+        pbc = self.validate_pbc(system.get_pbc())
+        cell = self.validate_cell(system.get_cell(), pbc)
 
         # Create C-compatible list of atomic indices for which the ACSF is
         # calculated
-        calculate_all = False
         if centers is None:
-            calculate_all = True
-            indices = np.arange(len(system))
-        else:
-            indices = centers
-
-        # If periodicity is not requested, and the output is requested for all
-        # atoms, we skip all the intricate optimizations that will make things
-        # actually slower for this case.
-        if calculate_all and not self.periodic:
-            n_atoms = len(system)
-            all_pos = system.get_positions()
-            dmat = dscribe.utils.geometry.get_adjacency_matrix(
-                self.r_cut, all_pos, all_pos
-            )
-        # Otherwise the amount of pairwise distances that are calculated is
-        # kept at minimum. Only distances for the given indices (and possibly
-        # the secondary neighbours if G4 is specified) are calculated.
-        else:
-            # Create the extended system if periodicity is requested. For ACSF only
-            # the distance from central atom needs to be considered in extending
-            # the system.
-            if self.periodic:
-                system = dscribe.utils.geometry.get_extended_system(
-                    system, self.r_cut, return_cell_indices=False
-                )
-
-            # First calculate distances from specified centers to all other
-            # atoms. This is already enough for everything else except G4.
-            n_atoms = len(system)
-            all_pos = system.get_positions()
-            central_pos = all_pos[indices]
-            dmat_primary = dscribe.utils.geometry.get_adjacency_matrix(
-                self.r_cut, central_pos, all_pos
-            )
-
-            # Create symmetric full matrix
-            col = dmat_primary.col
-            row = [
-                indices[x] for x in dmat_primary.row
-            ]  # Fix row numbering to refer to original system
-            data = dmat_primary.data
-            dmat = coo_matrix((data, (row, col)), shape=(n_atoms, n_atoms))
-            dmat_lil = dmat.tolil()
-            dmat_lil[col, row] = dmat_lil[row, col]
-
-            # If G4 terms are requested, calculate also secondary neighbour distances
-            if len(self.g4_params) != 0:
-                neighbour_indices = np.unique(col)
-                neigh_pos = all_pos[neighbour_indices]
-                dmat_secondary = dscribe.utils.geometry.get_adjacency_matrix(
-                    self.r_cut, neigh_pos, neigh_pos
-                )
-                col = [
-                    neighbour_indices[x] for x in dmat_secondary.col
-                ]  # Fix col numbering to refer to original system
-                row = [
-                    neighbour_indices[x] for x in dmat_secondary.row
-                ]  # Fix row numbering to refer to original system
-                dmat_lil[row, col] = np.array(dmat_secondary.data)
-
-            dmat = dmat_lil.tocoo()
-
-        # Get adjancency list and full dense adjancency matrix
-        neighbours = dscribe.utils.geometry.get_adjacency_list(dmat)
-        dmat_dense = np.full(
-            (n_atoms, n_atoms), sys.float_info.max
-        )  # The non-neighbor values are treated as "infinitely far".
-        dmat_dense[dmat.col, dmat.row] = dmat.data
+            centers = np.arange(len(system))
 
         # Calculate ACSF with C++
-        output = np.array(
-            self.acsf_wrapper.create(
-                system.get_positions(),
-                system.get_atomic_numbers(),
-                dmat_dense,
-                neighbours,
-                indices,
-            ),
-            dtype=np.float64,
+        out = self.init_descriptor_array(len(centers))
+        self.acsf_wrapper.create(
+            out,
+            positions,
+            atomic_numbers,
+            cell,
+            pbc,
+            centers,
         )
 
-        return output
+ return out
+ -
[docs] def get_number_of_features(self): +
+[docs] + def get_number_of_features(self): """Used to inquire the final number of features that this descriptor will have. Returns: int: Number of features for this descriptor. """ - wrapper = self.acsf_wrapper - descsize = (1 + wrapper.n_g2 + wrapper.n_g3) * wrapper.n_types - descsize += (wrapper.n_g4 + wrapper.n_g5) * wrapper.n_type_pairs + return self.acsf_wrapper.get_number_of_features()
- return int(descsize)
-
[docs] def validate_derivatives_method(self, method, attach): +
+[docs] + def validate_derivatives_method(self, method, attach): if not attach: raise ValueError( "ACSF derivatives can only be calculated with attach=True." ) return super().validate_derivatives_method(method, attach)
+ @property def species(self): return self._species @@ -397,12 +343,9 @@

Source code for dscribe.descriptors.acsf

         self._set_species(value)
         self.acsf_wrapper.atomic_numbers = self._atomic_numbers.tolist()
 
-    @property
-    def r_cut(self):
-        return self.acsf_wrapper.r_cut
-
-    @r_cut.setter
-    def r_cut(self, value):
+
+[docs] + def validate_r_cut(self, value): """Used to check the validity of given radial cutoff. Args: @@ -410,14 +353,20 @@

Source code for dscribe.descriptors.acsf

         """
         if value <= 0:
             raise ValueError("Cutoff radius should be positive.")
-        self.acsf_wrapper.r_cut = value
+        return value
+ @property - def g2_params(self): - return self.acsf_wrapper.get_g2_params() + def r_cut(self): + return self.acsf_wrapper.r_cut - @g2_params.setter - def g2_params(self, value): + @r_cut.setter + def r_cut(self, value): + self.acsf_wrapper.r_cut = self.validate_r_cut(value) + +
+[docs] + def validate_g2_params(self, value): """Used to check the validity of given G2 parameters. Args: @@ -442,14 +391,20 @@

Source code for dscribe.descriptors.acsf

             if np.any(value[:, 0] <= 0) is True:
                 raise ValueError("G2 eta parameters should be positive numbers.")
 
-        self.acsf_wrapper.set_g2_params(value.tolist())
+        return value.tolist()
+ @property - def g3_params(self): - return self.acsf_wrapper.g3_params + def g2_params(self): + return self.acsf_wrapper.g2_params - @g3_params.setter - def g3_params(self, value): + @g2_params.setter + def g2_params(self, value): + self.acsf_wrapper.g2_params = self.validate_g2_params(value) + +
+[docs] + def validate_g3_params(self, value): """Used to check the validity of given G3 parameters and to initialize the C-memory layout for them. @@ -465,14 +420,26 @@

Source code for dscribe.descriptors.acsf

             if value.ndim != 1:
                 raise ValueError("g3_params should be a vector.")
 
-        self.acsf_wrapper.g3_params = value.tolist()
+        return value.tolist()
+ @property - def g4_params(self): - return self.acsf_wrapper.g4_params + def g3_params(self): + return self.acsf_wrapper.g3_params - @g4_params.setter - def g4_params(self, value): + @g3_params.setter + def g3_params(self, value): + """Used to check the validity of given G3 parameters and to + initialize the C-memory layout for them. + + Args: + value(array): List of G3 parameters. + """ + self.acsf_wrapper.g3_params = self.validate_g3_params(value) + +
+[docs] + def validate_g4_params(self, value): """Used to check the validity of given G4 parameters and to initialize the C-memory layout for them. @@ -498,14 +465,20 @@

Source code for dscribe.descriptors.acsf

             if np.any(value[:, 2] <= 0) is True:
                 raise ValueError("3-body G4 eta parameters should be positive numbers.")
 
-        self.acsf_wrapper.g4_params = value.tolist()
+        return value.tolist()
+ @property - def g5_params(self): - return self.acsf_wrapper.g5_params + def g4_params(self): + return self.acsf_wrapper.g4_params - @g5_params.setter - def g5_params(self, value): + @g4_params.setter + def g4_params(self, value): + self.acsf_wrapper.g4_params = self.validate_g4_params(value) + +
+[docs] + def validate_g5_params(self, value): """Used to check the validity of given G5 parameters and to initialize the C-memory layout for them. @@ -531,7 +504,17 @@

Source code for dscribe.descriptors.acsf

             if np.any(value[:, 2] <= 0) is True:
                 raise ValueError("3-body G5 eta parameters should be positive numbers.")
 
-        self.acsf_wrapper.g5_params = value.tolist()
+ return value.tolist()
+ + + @property + def g5_params(self): + return self.acsf_wrapper.g5_params + + @g5_params.setter + def g5_params(self, value): + self.acsf_wrapper.g5_params = self.validate_g5_params(value)
+
diff --git a/docs/2.1.x/_modules/dscribe/descriptors/coulombmatrix.html b/docs/2.1.x/_modules/dscribe/descriptors/coulombmatrix.html index 4bdff7b6..7962c949 100644 --- a/docs/2.1.x/_modules/dscribe/descriptors/coulombmatrix.html +++ b/docs/2.1.x/_modules/dscribe/descriptors/coulombmatrix.html @@ -1,22 +1,24 @@ - + dscribe.descriptors.coulombmatrix — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,20 +99,18 @@

Source code for dscribe.descriptors.coulombmatrix

See the License for the specific language governing permissions and limitations under the License. """ -import numpy as np +import numpy as np from ase import Atoms import ase.geometry.cell -import sparse - from dscribe.descriptors.descriptormatrix import DescriptorMatrix -from dscribe.utils.dimensionality import is1d - import dscribe.ext -
[docs]class CoulombMatrix(DescriptorMatrix): +
+[docs] +class CoulombMatrix(DescriptorMatrix): """Calculates the zero padded Coulomb matrix. The Coulomb matrix is defined as: @@ -136,7 +136,9 @@

Source code for dscribe.descriptors.coulombmatrix

Processing Systems 25 (NIPS 2012) """ -
[docs] def __init__( +
+[docs] + def __init__( self, n_atoms_max, permutation="sorted_l2", @@ -158,7 +160,10 @@

Source code for dscribe.descriptors.coulombmatrix

0 if seed is None else seed, )
-
[docs] def create(self, system, n_jobs=1, only_physical_cores=False, verbose=False): + +
+[docs] + def create(self, system, n_jobs=1, only_physical_cores=False, verbose=False): """Return the Coulomb matrix for the given systems. Args: @@ -204,7 +209,10 @@

Source code for dscribe.descriptors.coulombmatrix

return output
-
[docs] def create_single(self, system): + +
+[docs] + def create_single(self, system): """ Args: system (:class:`ase.Atoms`): Input system. @@ -212,21 +220,30 @@

Source code for dscribe.descriptors.coulombmatrix

Returns: ndarray: The zero padded matrix as a flattened 1D array. """ + # Validate and normalize system + positions = self.validate_positions(system.get_positions()) + atomic_numbers = system.get_atomic_numbers() + pbc = self.validate_pbc(system.get_pbc()) + cell = self.validate_cell(system.get_cell(), pbc) + # Initialize output array in dense format. out_des = np.zeros((self.get_number_of_features()), dtype=np.float64) # Calculate with C++ extension self.wrapper.create( out_des, - system.get_positions(), - system.get_atomic_numbers(), - system.get_cell(), - system.get_pbc(), + positions, + atomic_numbers, + cell, + pbc, ) return out_des
-
[docs] def derivatives_numerical( + +
+[docs] + def derivatives_numerical( self, d, c, @@ -266,7 +283,9 @@

Source code for dscribe.descriptors.coulombmatrix

pbc, indices, return_descriptor, - )
+ )
+
+
diff --git a/docs/2.1.x/_modules/dscribe/descriptors/descriptor.html b/docs/2.1.x/_modules/dscribe/descriptors/descriptor.html index 3178c47c..76c1141f 100644 --- a/docs/2.1.x/_modules/dscribe/descriptors/descriptor.html +++ b/docs/2.1.x/_modules/dscribe/descriptors/descriptor.html @@ -1,22 +1,24 @@ - + dscribe.descriptors.descriptor — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,19 +99,24 @@

Source code for dscribe.descriptors.descriptor

See the License for the specific language governing permissions and limitations under the License. """ + from abc import ABC, abstractmethod import numpy as np import sparse as sp +import ase.geometry.cell + from dscribe.utils.species import get_atomic_numbers import joblib from joblib import Parallel, delayed -

[docs]class Descriptor(ABC): +
+[docs] +class Descriptor(ABC): """An abstract base class for all descriptors.""" def __init__(self, periodic, sparse, dtype="float64"): @@ -132,7 +139,9 @@

Source code for dscribe.descriptors.descriptor

self._atomic_number_set = None self._species = None -

[docs] @abstractmethod +
+[docs] + @abstractmethod def create(self, system, *args, **kwargs): """Creates the descriptor for the given systems. @@ -145,7 +154,10 @@

Source code for dscribe.descriptors.descriptor

np.array | scipy.sparse.coo_matrix: A descriptor for the system. """

-
[docs] @abstractmethod + +
+[docs] + @abstractmethod def get_number_of_features(self): """Used to inquire the final number of features that this descriptor will have. @@ -154,7 +166,10 @@

Source code for dscribe.descriptors.descriptor

int: Number of features for this descriptor. """

-
[docs] def validate_derivatives_method(self, method): + +
+[docs] + def validate_derivatives_method(self, method): """Used to validate and determine the final method for calculating the derivatives. """ @@ -167,6 +182,7 @@

Source code for dscribe.descriptors.descriptor

method = "numerical" return method

+ @property def sparse(self): return self._sparse @@ -208,7 +224,24 @@

Source code for dscribe.descriptors.descriptor

self._atomic_number_set = set(self._atomic_numbers) self._species = species -

[docs] def check_atomic_numbers(self, atomic_numbers): +
+[docs] + def validate_species(self, value): + """Used to validate the species information. + + Args: + species(iterable): Chemical species either as a list of atomic + numbers or list of chemical symbols. + + Returns: + List of atomic numbers. + """ + return get_atomic_numbers(value)
+ + +
+[docs] + def validate_atomic_numbers(self, atomic_numbers): """Used to check that the given atomic numbers have been defined for this descriptor. @@ -226,9 +259,65 @@

Source code for dscribe.descriptors.descriptor

raise ValueError( "The following atomic numbers are not defined " "for this descriptor: {}".format(zs.difference(self._atomic_number_set)) - )

+ ) + return atomic_numbers
+ + +
+[docs] + def validate_positions(self, positions): + """Used to check that the cartesian positions are valid. -
[docs] def format_array(self, input): + Args: + positions(np.ndarray): Positions to check . + + Raises: + ValueError: If the atomic numbers in the given system are not + included in the species given to this descriptor. + """ + # Check that the system does not have elements that are not in the list + # of atomic numbers + if np.isnan(positions.any()): + raise ValueError( + "The given system has a NaN value in the atomic positions." + ) + return positions
+ + +
+[docs] + def validate_pbc(self, pbc): + """Used to check that the given pbc cell is valid and return a + normalized value. + + Args: + pbc(np.ndarray): Cell periodicity as three booleans. + """ + return np.asarray(pbc, dtype=bool)
+ + +
+[docs] + def validate_cell(self, cell, pbc): + """Used to check that the given unit cell is valid. + + Args: + cell(np.ndarray): 3x3 unit cell. + pbc(np.ndarray): Cell periodicity as three booleans. + + Raises: + ValueError: If the given cell is invalid. + """ + if self.periodic and any(pbc) and cell.volume == 0: + raise ValueError( + "Cannot compute periodic descriptor on a zero-volume cell." + ) + return ase.geometry.cell.complete_cell(cell)
+ + +
+[docs] + def format_array(self, input): """Used to format a float64 numpy array in the final format that will be returned to the user. """ @@ -239,7 +328,10 @@

Source code for dscribe.descriptors.descriptor

return input

-
[docs] def create_parallel( + +
+[docs] + def create_parallel( self, inp, func, @@ -403,6 +495,7 @@

Source code for dscribe.descriptors.descriptor

return results

+ def _get_indices(self, n_atoms, include, exclude): """Given the number of atoms and which indices to include or exclude, returns a list of final indices that will be used. If not includes or @@ -445,7 +538,9 @@

Source code for dscribe.descriptors.descriptor

return displaced_indices -

[docs] def derivatives_parallel( +
+[docs] + def derivatives_parallel( self, inp, func, @@ -678,7 +773,9 @@

Source code for dscribe.descriptors.descriptor

descriptors.extend(part) return (derivatives, descriptors) - return derivatives

+ return derivatives
+
+
diff --git a/docs/2.1.x/_modules/dscribe/descriptors/descriptorglobal.html b/docs/2.1.x/_modules/dscribe/descriptors/descriptorglobal.html index df09fad2..c4b4f276 100644 --- a/docs/2.1.x/_modules/dscribe/descriptors/descriptorglobal.html +++ b/docs/2.1.x/_modules/dscribe/descriptors/descriptorglobal.html @@ -1,22 +1,24 @@ - + dscribe.descriptors.descriptorglobal — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -94,6 +96,7 @@

Source code for dscribe.descriptors.descriptorglobal

See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np import sparse as sp from ase import Atoms @@ -102,10 +105,14 @@

Source code for dscribe.descriptors.descriptorglobal

from dscribe.utils.dimensionality import is1d -
[docs]class DescriptorGlobal(Descriptor): +
+[docs] +class DescriptorGlobal(Descriptor): """An abstract base class for all global descriptors.""" -
[docs] def derivatives( +
+[docs] + def derivatives( self, system, include=None, @@ -240,7 +247,10 @@

Source code for dscribe.descriptors.descriptorglobal

return output
-
[docs] def derivatives_single( + +
+[docs] + def derivatives_single( self, system, indices, @@ -289,7 +299,10 @@

Source code for dscribe.descriptors.descriptorglobal

return (d, c) return d
-
[docs] def derivatives_numerical( + +
+[docs] + def derivatives_numerical( self, d, c, @@ -338,7 +351,9 @@

Source code for dscribe.descriptors.descriptorglobal

i += 1 if return_descriptor: - np.copyto(c, self.create_single(system))
+ np.copyto(c, self.create_single(system))
+
+
diff --git a/docs/2.1.x/_modules/dscribe/descriptors/descriptorlocal.html b/docs/2.1.x/_modules/dscribe/descriptors/descriptorlocal.html index f3701839..12757939 100644 --- a/docs/2.1.x/_modules/dscribe/descriptors/descriptorlocal.html +++ b/docs/2.1.x/_modules/dscribe/descriptors/descriptorlocal.html @@ -1,22 +1,24 @@ - + dscribe.descriptors.descriptorlocal — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -94,22 +96,26 @@

Source code for dscribe.descriptors.descriptorlocal

See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np -import sparse as sp from ase import Atoms from dscribe.descriptors.descriptor import Descriptor from dscribe.utils.dimensionality import is1d -
[docs]class DescriptorLocal(Descriptor): +
+[docs] +class DescriptorLocal(Descriptor): """An abstract base class for all local descriptors.""" def __init__(self, periodic, sparse, dtype="float64", average="off"): super().__init__(periodic=periodic, sparse=sparse, dtype=dtype) self.average = average -
[docs] def validate_derivatives_method(self, method, attach): +
+[docs] + def validate_derivatives_method(self, method, attach): """Used to validate and determine the final method for calculating the derivatives. """ @@ -122,7 +128,10 @@

Source code for dscribe.descriptors.descriptorlocal

method = "numerical" return method
-
[docs] def derivatives( + +
+[docs] + def derivatives( self, system, centers=None, @@ -310,7 +319,10 @@

Source code for dscribe.descriptors.descriptorlocal

return output
-
[docs] def init_descriptor_array(self, n_centers): + +
+[docs] + def init_descriptor_array(self, n_centers): """Return a zero-initialized numpy array for the descriptor.""" n_features = self.get_number_of_features() if self.average != "off": @@ -319,7 +331,10 @@

Source code for dscribe.descriptors.descriptorlocal

c = np.zeros((n_centers, n_features), dtype=np.float64) return c
-
[docs] def init_derivatives_array(self, n_centers, n_indices): + +
+[docs] + def init_derivatives_array(self, n_centers, n_indices): """Return a zero-initialized numpy array for the derivatives.""" n_features = self.get_number_of_features() if self.average != "off": @@ -327,7 +342,10 @@

Source code for dscribe.descriptors.descriptorlocal

else: return np.zeros((n_centers, n_indices, 3, n_features), dtype=np.float64)
-
[docs] def derivatives_single( + +
+[docs] + def derivatives_single( self, system, centers, @@ -397,7 +415,10 @@

Source code for dscribe.descriptors.descriptorlocal

return (d, c) return d
-
[docs] def derivatives_numerical( + +
+[docs] + def derivatives_numerical( self, d, c, @@ -457,7 +478,9 @@

Source code for dscribe.descriptors.descriptorlocal

if return_descriptor: d0 = self.create_single(system, centers) - np.copyto(c, d0)
+ np.copyto(c, d0)
+
+
diff --git a/docs/2.1.x/_modules/dscribe/descriptors/descriptormatrix.html b/docs/2.1.x/_modules/dscribe/descriptors/descriptormatrix.html index 10e3bcd0..551f3f15 100644 --- a/docs/2.1.x/_modules/dscribe/descriptors/descriptormatrix.html +++ b/docs/2.1.x/_modules/dscribe/descriptors/descriptormatrix.html @@ -1,22 +1,24 @@ - + dscribe.descriptors.descriptormatrix — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,6 +99,7 @@

Source code for dscribe.descriptors.descriptormatrix

See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np from numpy.random import RandomState @@ -105,7 +108,9 @@

Source code for dscribe.descriptors.descriptormatrix

from dscribe.descriptors.descriptorglobal import DescriptorGlobal -
[docs]class DescriptorMatrix(DescriptorGlobal): +
+[docs] +class DescriptorMatrix(DescriptorGlobal): """A common base class for two-body matrix-like descriptors.""" def __init__( @@ -174,7 +179,9 @@

Source code for dscribe.descriptors.descriptormatrix

self._norm_vector = None self.sigma = sigma -
[docs] def get_matrix(self, system): +
+[docs] + def get_matrix(self, system): """Used to get the final matrix for this descriptor. Args: @@ -184,7 +191,10 @@

Source code for dscribe.descriptors.descriptormatrix

np.ndarray: The final two-dimensional matrix for this descriptor. """
-
[docs] def create_single(self, system): + +
+[docs] + def create_single(self, system): """ Args: system (:class:`ase.Atoms` | :class:`.System`): Input system. @@ -192,6 +202,9 @@

Source code for dscribe.descriptors.descriptormatrix

Returns: ndarray: The zero padded matrix either as a 1D array. """ + # Validate positions + self.validate_positions(system.get_positions()) + # Remove the old norm vector for the new system self._norm_vector = None @@ -214,7 +227,10 @@

Source code for dscribe.descriptors.descriptormatrix

return matrix
-
[docs] def sort(self, matrix): + +
+[docs] + def sort(self, matrix): """Sorts the given matrix by using the L2 norm. Args: @@ -232,7 +248,10 @@

Source code for dscribe.descriptors.descriptormatrix

return sorted_matrix
-
[docs] def get_eigenspectrum(self, matrix): + +
+[docs] + def get_eigenspectrum(self, matrix): """Calculates the eigenvalues of the matrix and returns a list of them sorted by their descending absolute value. @@ -257,7 +276,10 @@

Source code for dscribe.descriptors.descriptormatrix

return eigenvalues
-
[docs] def zero_pad(self, array): + +
+[docs] + def zero_pad(self, array): """Zero-pads the given matrix. Args: @@ -273,7 +295,10 @@

Source code for dscribe.descriptors.descriptormatrix

return padded
-
[docs] def get_number_of_features(self): + +
+[docs] + def get_number_of_features(self): """Used to inquire the final number of features that this descriptor will have. @@ -285,7 +310,10 @@

Source code for dscribe.descriptors.descriptormatrix

else: return int(self.n_atoms_max**2)
-
[docs] def sort_randomly(self, matrix, sigma): + +
+[docs] + def sort_randomly(self, matrix, sigma): """ Given a coulomb matrix, it adds random noise to the sorting defined by sigma. For sorting, L2-norm is used. @@ -310,6 +338,7 @@

Source code for dscribe.descriptors.descriptormatrix

return matrix
+ def _get_norm_vector(self, matrix): """ Takes a coulomb matrix as input. Returns L2 norm of each row / column in a 1D-array. @@ -324,7 +353,9 @@

Source code for dscribe.descriptors.descriptormatrix

self._norm_vector = np.linalg.norm(matrix, axis=1) return self._norm_vector -
[docs] def unflatten(self, features, n_systems=None): +
+[docs] + def unflatten(self, features, n_systems=None): """ Can be used to "unflatten" a matrix descriptor back into a 2D array. Useful for testing and visualization purposes. @@ -363,7 +394,9 @@

Source code for dscribe.descriptors.descriptormatrix

) else: full = features.reshape((self.n_atoms_max, self.n_atoms_max)) - return full
+ return full
+
+
diff --git a/docs/2.1.x/_modules/dscribe/descriptors/ewaldsummatrix.html b/docs/2.1.x/_modules/dscribe/descriptors/ewaldsummatrix.html index 70c34f6e..697d927c 100644 --- a/docs/2.1.x/_modules/dscribe/descriptors/ewaldsummatrix.html +++ b/docs/2.1.x/_modules/dscribe/descriptors/ewaldsummatrix.html @@ -1,22 +1,24 @@ - + dscribe.descriptors.ewaldsummatrix — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,6 +99,7 @@

Source code for dscribe.descriptors.ewaldsummatrix

See the License for the specific language governing permissions and limitations under the License. """ + import math import numpy as np @@ -109,7 +112,9 @@

Source code for dscribe.descriptors.ewaldsummatrix

from dscribe.core.lattice import Lattice -
[docs]class EwaldSumMatrix(DescriptorMatrix): +
+[docs] +class EwaldSumMatrix(DescriptorMatrix): """ Calculates an Ewald sum matrix for the a given system. @@ -144,7 +149,9 @@

Source code for dscribe.descriptors.ewaldsummatrix

" """ -
[docs] def create( +
+[docs] + def create( self, system, accuracy=1e-5, @@ -260,7 +267,10 @@

Source code for dscribe.descriptors.ewaldsummatrix

return output
-
[docs] def create_single(self, system, accuracy=1e-5, w=1, r_cut=None, g_cut=None, a=None): + +
+[docs] + def create_single(self, system, accuracy=1e-5, w=1, r_cut=None, g_cut=None, a=None): """ Args: system (:class:`ase.Atoms` | :class:`.System`): Input system. @@ -313,7 +323,10 @@

Source code for dscribe.descriptors.ewaldsummatrix

matrix = super().create_single(system) return matrix
-
[docs] def get_matrix(self, system): + +
+[docs] + def get_matrix(self, system): """ The total energy matrix. Each matrix element (i, j) corresponds to the total interaction energy in a system with atoms i and j. @@ -332,6 +345,7 @@

Source code for dscribe.descriptors.ewaldsummatrix

return total
+ def _calc_zero(self): """Calculates the constant part of the Ewald sum matrix. @@ -472,6 +486,7 @@

Source code for dscribe.descriptors.ewaldsummatrix

np.fill_diagonal(erecip, diag) return erecip
+
diff --git a/docs/2.1.x/_modules/dscribe/descriptors/lmbtr.html b/docs/2.1.x/_modules/dscribe/descriptors/lmbtr.html index 1f8e3f23..06df62fb 100644 --- a/docs/2.1.x/_modules/dscribe/descriptors/lmbtr.html +++ b/docs/2.1.x/_modules/dscribe/descriptors/lmbtr.html @@ -1,22 +1,24 @@ - + dscribe.descriptors.lmbtr — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,6 +99,7 @@

Source code for dscribe.descriptors.lmbtr

 See the License for the specific language governing permissions and
 limitations under the License.
 """
+
 import sys
 import math
 
@@ -119,7 +122,9 @@ 

Source code for dscribe.descriptors.lmbtr

 import dscribe.utils.geometry
 
 
-
[docs]class LMBTR(DescriptorLocal): +
+[docs] +class LMBTR(DescriptorLocal): """ Implementation of the Local Many-body tensor representation. @@ -138,7 +143,9 @@

Source code for dscribe.descriptors.lmbtr

     for each central species.
     """
 
-
[docs] def __init__( +
+[docs] + def __init__( self, geometry=None, grid=None, @@ -266,6 +273,7 @@

Source code for dscribe.descriptors.lmbtr

         # Initializing .create() level variables
         self._interaction_limit = None
+ @property def grid(self): return self._grid @@ -363,7 +371,9 @@

Source code for dscribe.descriptors.lmbtr

             )
         self._normalization = value
 
-
[docs] def create( +
+[docs] + def create( self, system, centers=None, n_jobs=1, only_physical_cores=False, verbose=False ): """Return the LMBTR output for the given systems and given centers. @@ -453,7 +463,10 @@

Source code for dscribe.descriptors.lmbtr

 
         return output
-
[docs] def create_single( + +
+[docs] + def create_single( self, system, centers=None, @@ -475,16 +488,16 @@

Source code for dscribe.descriptors.lmbtr

             centers, for k terms, as an array. These are ordered as given in
             centers.
         """
-        # Check that the system does not have elements that are not in the list
-        # of atomic numbers
-        atomic_number_set = set(system.get_atomic_numbers())
-        self.check_atomic_numbers(atomic_number_set)
+        # Validate and normalize system
+        self.validate_positions(system.get_positions())
+        atomic_numbers = self.validate_atomic_numbers(system.get_atomic_numbers())
+        pbc = self.validate_pbc(system.get_pbc())
+        self.validate_cell(system.get_cell(), pbc)
         self._interaction_limit = len(system)
         system_positions = system.get_positions()
-        system_atomic_numbers = system.get_atomic_numbers()
 
         # Ensure that the atomic number 0 is not present in the system
-        if 0 in atomic_number_set:
+        if 0 in set(atomic_numbers):
             raise ValueError(
                 "Please do not use the atomic number 0 in local MBTR as it "
                 "is reserved to mark the atoms use as analysis centers."
@@ -521,7 +534,7 @@ 

Source code for dscribe.descriptors.lmbtr

                     indices_k2.append(i)
                     indices_k3.append(i)
                     new_pos_k2.append(system_positions[i])
-                    new_atomic_numbers_k2.append(system_atomic_numbers[i])
+                    new_atomic_numbers_k2.append(atomic_numbers[i])
                 elif isinstance(i, (list, tuple, np.ndarray)):
                     if len(i) != 3:
                         raise ValueError(
@@ -571,7 +584,10 @@ 

Source code for dscribe.descriptors.lmbtr

 
         return result
-
[docs] def get_number_of_features(self): + +
+[docs] + def get_number_of_features(self): """Used to inquire the final number of features that this descriptor will have. @@ -606,6 +622,7 @@

Source code for dscribe.descriptors.lmbtr

 
         return int(n_features)
+ def _make_new_klist_local(self, kx_list): new_kx_list = [] @@ -837,12 +854,12 @@

Source code for dscribe.descriptors.lmbtr

 
             # Fill in block for extended system to new system
             dmat_ext_to_new = scipy.spatial.distance.cdist(ext_pos, new_pos)
-            dmat[
-                0:n_atoms_ext, n_atoms_ext : n_atoms_ext + n_atoms_new
-            ] = dmat_ext_to_new
-            dmat[
-                n_atoms_ext : n_atoms_ext + n_atoms_new, 0:n_atoms_ext
-            ] = dmat_ext_to_new.T
+            dmat[0:n_atoms_ext, n_atoms_ext : n_atoms_ext + n_atoms_new] = (
+                dmat_ext_to_new
+            )
+            dmat[n_atoms_ext : n_atoms_ext + n_atoms_new, 0:n_atoms_ext] = (
+                dmat_ext_to_new.T
+            )
 
             # Calculate adjacencies and the dense version
             dmat = dmat.tocoo()
@@ -908,7 +925,9 @@ 

Source code for dscribe.descriptors.lmbtr

 
         return k3
 
-
[docs] def get_location(self, species): +
+[docs] + def get_location(self, species): """Can be used to query the location of a species combination in the the flattened output. @@ -946,7 +965,7 @@

Source code for dscribe.descriptors.lmbtr

             numbers.append(specie)
 
         # Check that species exists and that X is included
-        self.check_atomic_numbers(numbers)
+        self.validate_atomic_numbers(numbers)
         if 0 not in numbers:
             raise ValueError(
                 "The central species X (atomic number 0) has to be one of the elements."
@@ -989,7 +1008,9 @@ 

Source code for dscribe.descriptors.lmbtr

             start = int(m * n)
             end = int((m + 1) * n)
 
-        return slice(start, end)
+ return slice(start, end)
+
+
diff --git a/docs/2.1.x/_modules/dscribe/descriptors/mbtr.html b/docs/2.1.x/_modules/dscribe/descriptors/mbtr.html index 957549c6..8457d124 100644 --- a/docs/2.1.x/_modules/dscribe/descriptors/mbtr.html +++ b/docs/2.1.x/_modules/dscribe/descriptors/mbtr.html @@ -1,22 +1,24 @@ - + dscribe.descriptors.mbtr — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,6 +99,7 @@

Source code for dscribe.descriptors.mbtr

 See the License for the specific language governing permissions and
 limitations under the License.
 """
+
 import sys
 import math
 import numpy as np
@@ -115,7 +118,9 @@ 

Source code for dscribe.descriptors.mbtr

 k3_geometry_functions = set(["angle", "cosine"])
 
 
-
[docs]def check_grid(grid: dict): +
+[docs] +def check_grid(grid: dict): """Used to ensure that the given grid settings are valid. Args: @@ -135,7 +140,10 @@

Source code for dscribe.descriptors.mbtr

         raise ValueError("The min value should be smaller than the max value.")
-
[docs]def check_geometry(geometry: dict): + +
+[docs] +def check_geometry(geometry: dict): """Used to ensure that the given geometry settings are valid. Args: @@ -155,7 +163,10 @@

Source code for dscribe.descriptors.mbtr

         raise ValueError("Please specify a geometry function.")
-
[docs]def check_weighting(k: int, weighting: dict, periodic: bool): + +
+[docs] +def check_weighting(k: int, weighting: dict, periodic: bool): """Used to ensure that the given weighting settings are valid. Args: @@ -206,7 +217,10 @@

Source code for dscribe.descriptors.mbtr

             raise ValueError("Periodic systems need to have a weighting function.")
-
[docs]class MBTR(DescriptorGlobal): + +
+[docs] +class MBTR(DescriptorGlobal): """Implementation of the Many-body tensor representation. You can use this descriptor for finite and periodic systems. When dealing @@ -216,7 +230,9 @@

Source code for dscribe.descriptors.mbtr

     a non-identity correlation matrix.
     """
 
-
[docs] def __init__( +
+[docs] + def __init__( self, geometry=None, grid=None, @@ -349,6 +365,7 @@

Source code for dscribe.descriptors.mbtr

         # Initializing .create() level variables
         self._interaction_limit = None
+ @property def grid(self): return self._grid @@ -430,7 +447,9 @@

Source code for dscribe.descriptors.mbtr

             )
         self._normalization = value
 
-
[docs] def create(self, system, n_jobs=1, only_physical_cores=False, verbose=False): +
+[docs] + def create(self, system, n_jobs=1, only_physical_cores=False, verbose=False): """Return MBTR output for the given systems. Args: @@ -471,7 +490,10 @@

Source code for dscribe.descriptors.mbtr

 
         return output
-
[docs] def create_single(self, system): + +
+[docs] + def create_single(self, system): """Return the many-body tensor representation for the given system. Args: @@ -485,9 +507,11 @@

Source code for dscribe.descriptors.mbtr

         self.system = system
         self._interaction_limit = len(system)
 
-        # Check that the system does not have elements that are not in the list
-        # of atomic numbers
-        self.check_atomic_numbers(system.get_atomic_numbers())
+        # Validate and normalize system
+        self.validate_positions(system.get_positions())
+        self.validate_atomic_numbers(system.get_atomic_numbers())
+        pbc = self.validate_pbc(system.get_pbc())
+        self.validate_cell(system.get_cell(), pbc)
 
         mbtr, _ = getattr(self, f"_get_k{self.k}")(system, True, False)
 
@@ -500,7 +524,10 @@ 

Source code for dscribe.descriptors.mbtr

 
         return mbtr
-
[docs] def get_number_of_features(self): + +
+[docs] + def get_number_of_features(self): """Used to inquire the final number of features that this descriptor will have. @@ -519,7 +546,10 @@

Source code for dscribe.descriptors.mbtr

 
         return int(n_features)
-
[docs] def get_location(self, species): + +
+[docs] + def get_location(self, species): """Can be used to query the location of a species combination in the the output. @@ -556,7 +586,7 @@

Source code for dscribe.descriptors.mbtr

             numbers.append(specie)
 
         # Check that species exists
-        self.check_atomic_numbers(numbers)
+        self.validate_atomic_numbers(numbers)
 
         # Change into internal indexing
         numbers = [self.atomic_number_to_index[x] for x in numbers]
@@ -603,6 +633,7 @@ 

Source code for dscribe.descriptors.mbtr

 
         return slice(start, end)
+ def _get_k1(self, system, return_descriptor, return_derivatives): """Calculates the first order term and/or its derivatives with regard to atomic positions. @@ -966,7 +997,9 @@

Source code for dscribe.descriptors.mbtr

 
         return (k3, k3_d)
 
-
[docs] def validate_derivatives_method(self, method): +
+[docs] + def validate_derivatives_method(self, method): """Used to validate and determine the final method for calculating the derivatives. """ @@ -1006,14 +1039,17 @@

Source code for dscribe.descriptors.mbtr

 
         return method
-
[docs] def derivatives_analytical(self, d, c, system, indices, return_descriptor): + +
+[docs] + def derivatives_analytical(self, d, c, system, indices, return_descriptor): # Ensuring variables are re-initialized when a new system is introduced self.system = system self._interaction_limit = len(system) # Check that the system does not have elements that are not in the list # of atomic numbers - self.check_atomic_numbers(system.get_atomic_numbers()) + self.validate_atomic_numbers(system.get_atomic_numbers()) mbtr, mbtr_d = getattr(self, f"_get_k{self.k}")(system, return_descriptor, True) @@ -1031,7 +1067,9 @@

Source code for dscribe.descriptors.mbtr

             i += 1
 
         if return_descriptor:
-            np.copyto(c, mbtr)
+ np.copyto(c, mbtr)
+
+
diff --git a/docs/2.1.x/_modules/dscribe/descriptors/sinematrix.html b/docs/2.1.x/_modules/dscribe/descriptors/sinematrix.html index 993279e0..41cb73e2 100644 --- a/docs/2.1.x/_modules/dscribe/descriptors/sinematrix.html +++ b/docs/2.1.x/_modules/dscribe/descriptors/sinematrix.html @@ -1,22 +1,24 @@ - + dscribe.descriptors.sinematrix — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,6 +99,7 @@

Source code for dscribe.descriptors.sinematrix

See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np from ase import Atoms @@ -105,7 +108,9 @@

Source code for dscribe.descriptors.sinematrix

from dscribe.descriptors.descriptormatrix import DescriptorMatrix -

[docs]class SineMatrix(DescriptorMatrix): +
+[docs] +class SineMatrix(DescriptorMatrix): """Calculates the zero padded Sine matrix for different systems. The Sine matrix is defined as: @@ -129,7 +134,9 @@

Source code for dscribe.descriptors.sinematrix

https://doi.org/10.1002/qua.24917 """ -

[docs] def create(self, system, n_jobs=1, only_physical_cores=False, verbose=False): +
+[docs] + def create(self, system, n_jobs=1, only_physical_cores=False, verbose=False): """Return the Sine matrix for the given systems. Args: @@ -179,7 +186,10 @@

Source code for dscribe.descriptors.sinematrix

return output

-
[docs] def get_matrix(self, system): + +
+[docs] + def get_matrix(self, system): """Creates the Sine matrix for the given system. Args: @@ -196,7 +206,7 @@

Source code for dscribe.descriptors.sinematrix

B = system.get_cell() try: B_inv = system.get_cell_inverse() - except: + except Exception: raise ValueError( "The given system has a non-invertible cell matrix: {}.".format(B) ) @@ -222,7 +232,9 @@

Source code for dscribe.descriptors.sinematrix

# Set diagonal np.fill_diagonal(smat, 0.5 * q**2.4) - return smat

+ return smat
+
+
diff --git a/docs/2.1.x/_modules/dscribe/descriptors/soap.html b/docs/2.1.x/_modules/dscribe/descriptors/soap.html index e9c29f21..cf920025 100644 --- a/docs/2.1.x/_modules/dscribe/descriptors/soap.html +++ b/docs/2.1.x/_modules/dscribe/descriptors/soap.html @@ -1,22 +1,24 @@ - + dscribe.descriptors.soap — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,6 +99,7 @@

Source code for dscribe.descriptors.soap

 See the License for the specific language governing permissions and
 limitations under the License.
 """
+
 from warnings import warn
 
 import numpy as np
@@ -113,7 +116,9 @@ 

Source code for dscribe.descriptors.soap

 import dscribe.ext
 
 
-
[docs]class SOAP(DescriptorLocal): +
+[docs] +class SOAP(DescriptorLocal): """Class for generating a partial power spectrum from Smooth Overlap of Atomic Orbitals (SOAP). This implementation uses real (tesseral) spherical harmonics as the angular basis set and provides two orthonormalized @@ -136,7 +141,9 @@

Source code for dscribe.descriptors.soap

     https://doi.org/10.1038/s41524-018-0096-5
     """
 
-
[docs] def __init__( +
+[docs] + def __init__( self, r_cut=None, n_max=None, @@ -286,7 +293,6 @@

Source code for dscribe.descriptors.soap

         # Setup the involved chemical species
         self.species = species
 
-
         # Test that general settings are valid
         if sigma <= 0:
             raise ValueError(
@@ -312,7 +318,6 @@ 

Source code for dscribe.descriptors.soap

                 "one of the following: {}".format(average, supported_average)
             )
 
-
         if not (weighting or r_cut):
             raise ValueError("Either weighting or r_cut need to be defined")
         if weighting:
@@ -390,11 +395,11 @@ 

Source code for dscribe.descriptors.soap

         self.average = average
         self.compression = compression
-
[docs] def prepare_centers(self, system, centers=None): + +
+[docs] + def prepare_centers(self, system, centers=None): """Validates and prepares the centers for the C++ extension.""" - # Check that the system does not have elements that are not in the list - # of atomic numbers - self.check_atomic_numbers(system.get_atomic_numbers()) # Check if periodic is valid if self.periodic: @@ -432,7 +437,10 @@

Source code for dscribe.descriptors.soap

 
         return np.asarray(list_positions), indices
-
[docs] def get_cutoff_padding(self): + +
+[docs] + def get_cutoff_padding(self): """The radial cutoff is extended by adding a padding that depends on the used used sigma value. The padding is chosen so that the gaussians decay to the specified threshold value at the cutoff distance. @@ -441,6 +449,7 @@

Source code for dscribe.descriptors.soap

         cutoff_padding = self._sigma * np.sqrt(-2 * np.log(threshold))
         return cutoff_padding
+ def _infer_r_cut(self, weighting): """Used to determine an appropriate r_cut based on where the given weighting function setup. @@ -466,20 +475,28 @@

Source code for dscribe.descriptors.soap

         else:
             return None
 
-
[docs] def init_internal_dev_array(self, n_centers, n_atoms, n_types, n, l_max): +
+[docs] + def init_internal_dev_array(self, n_centers, n_atoms, n_types, n, l_max): d = np.zeros( (n_atoms, n_centers, n_types, n, (l_max + 1) * (l_max + 1)), dtype=np.float64, ) return d
-
[docs] def init_internal_array(self, n_centers, n_types, n, l_max): + +
+[docs] + def init_internal_array(self, n_centers, n_types, n, l_max): d = np.zeros( (n_centers, n_types, n, (l_max + 1) * (l_max + 1)), dtype=np.float64 ) return d
-
[docs] def create( + +
+[docs] + def create( self, system, centers=None, n_jobs=1, only_physical_cores=False, verbose=False ): """Return the SOAP output for the given systems and given centers. @@ -574,7 +591,10 @@

Source code for dscribe.descriptors.soap

 
         return output
-
[docs] def create_single(self, system, centers=None): + +
+[docs] + def create_single(self, system, centers=None): """Return the SOAP output for the given system and given centers. Args: @@ -591,11 +611,15 @@

Source code for dscribe.descriptors.soap

             centers and the second dimension is determined by the
             get_number_of_features()-function.
         """
+        # Validate and normalize system
+        positions = self.validate_positions(system.get_positions())
+        atomic_numbers = self.validate_atomic_numbers(system.get_atomic_numbers())
+        pbc = self.validate_pbc(system.get_pbc())
+        cell = self.validate_cell(system.get_cell(), pbc)
+
         cutoff_padding = self.get_cutoff_padding()
         centers, _ = self.prepare_centers(system, centers)
         n_centers = centers.shape[0]
-        pos = system.get_positions()
-        Z = system.get_atomic_numbers()
         soap_mat = self.init_descriptor_array(n_centers)
 
         # Determine the function to call based on rbf
@@ -624,10 +648,10 @@ 

Source code for dscribe.descriptors.soap

             # Calculate analytically with extension
             soap_gto.create(
                 soap_mat,
-                pos,
-                Z,
-                ase.geometry.cell.complete_cell(system.get_cell()),
-                np.asarray(system.get_pbc(), dtype=bool),
+                positions,
+                atomic_numbers,
+                cell,
+                pbc,
                 centers,
             )
         elif self._rbf == "polynomial":
@@ -654,10 +678,10 @@ 

Source code for dscribe.descriptors.soap

             )
             soap_poly.create(
                 soap_mat,
-                pos,
-                Z,
-                ase.geometry.cell.complete_cell(system.get_cell()),
-                np.asarray(system.get_pbc(), dtype=bool),
+                positions,
+                atomic_numbers,
+                cell,
+                pbc,
                 centers,
             )
 
@@ -669,7 +693,10 @@ 

Source code for dscribe.descriptors.soap

 
         return soap_mat
-
[docs] def validate_derivatives_method(self, method, attach): + +
+[docs] + def validate_derivatives_method(self, method, attach): """Used to validate and determine the final method for calculating the derivatives. """ @@ -715,7 +742,10 @@

Source code for dscribe.descriptors.soap

 
         return method
-
[docs] def derivatives_numerical( + +
+[docs] + def derivatives_numerical( self, d, c, @@ -816,7 +846,10 @@

Source code for dscribe.descriptors.soap

                 return_descriptor,
             )
-
[docs] def derivatives_analytical( + +
+[docs] + def derivatives_analytical( self, d, c, @@ -906,6 +939,7 @@

Source code for dscribe.descriptors.soap

             return_descriptor,
         )
+ @property def species(self): return self._species @@ -950,9 +984,7 @@

Source code for dscribe.descriptors.soap

         if mode not in supported_modes:
             raise ValueError(
                 "Invalid compression mode '{}' given. Please use "
-                "one of the following: {}".format(
-                    mode, supported_modes
-                )
+                "one of the following: {}".format(mode, supported_modes)
             )
 
         # Check species weighting
@@ -999,7 +1031,9 @@ 

Source code for dscribe.descriptors.soap

 
         self._compression = value
 
-
[docs] def get_number_of_features(self): +
+[docs] + def get_number_of_features(self): """Used to inquire the final number of features that this descriptor will have. @@ -1017,7 +1051,10 @@

Source code for dscribe.descriptors.soap

         n_elem_radial = n_elem * self._n_max
         return int((n_elem_radial) * (n_elem_radial + 1) / 2 * (self._l_max + 1))
-
[docs] def get_location(self, species): + +
+[docs] + def get_location(self, species): """Can be used to query the location of a species combination in the the flattened output. @@ -1095,7 +1132,10 @@

Source code for dscribe.descriptors.soap

 
         return slice(start, end)
-
[docs] def get_basis_gto(self, r_cut, n_max, l_max): + +
+[docs] + def get_basis_gto(self, r_cut, n_max, l_max): """Used to calculate the alpha and beta prefactors for the gto-radial basis. @@ -1144,7 +1184,10 @@

Source code for dscribe.descriptors.soap

 
         return alphas_full, betas_full
-
[docs] def get_basis_poly(self, r_cut, n_max): + +
+[docs] + def get_basis_poly(self, r_cut, n_max): """Used to calculate discrete vectors for the polynomial basis functions. Args: @@ -1295,7 +1338,9 @@

Source code for dscribe.descriptors.soap

 
         gss = np.dot(betas, fs)
 
-        return rx, gss
+ return rx, gss
+
+
diff --git a/docs/2.1.x/_modules/dscribe/descriptors/valleoganov.html b/docs/2.1.x/_modules/dscribe/descriptors/valleoganov.html index 2542d3ea..5f65f39a 100644 --- a/docs/2.1.x/_modules/dscribe/descriptors/valleoganov.html +++ b/docs/2.1.x/_modules/dscribe/descriptors/valleoganov.html @@ -1,22 +1,24 @@ - + dscribe.descriptors.valleoganov — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -85,7 +87,9 @@

Source code for dscribe.descriptors.valleoganov

< from dscribe.descriptors import MBTR -
[docs]class ValleOganov(MBTR): +
+[docs] +class ValleOganov(MBTR): """Shortcut for implementing the fingerprint descriptor by Valle and Oganov for using MBTR. Automatically uses the right weighting and normalizes the output, and can only be used for periodic systems. @@ -94,7 +98,9 @@

Source code for dscribe.descriptors.valleoganov

< as the other parameters and general usage of the descriptor, see the MBTR class. """ -
[docs] def __init__( +
+[docs] + def __init__( self, species, function, @@ -162,7 +168,9 @@

Source code for dscribe.descriptors.valleoganov

< normalization="valle_oganov", normalize_gaussians=True, dtype=dtype, - )
+ )
+
+
diff --git a/docs/2.1.x/_modules/dscribe/kernels/averagekernel.html b/docs/2.1.x/_modules/dscribe/kernels/averagekernel.html index 056494ae..c9679b7a 100644 --- a/docs/2.1.x/_modules/dscribe/kernels/averagekernel.html +++ b/docs/2.1.x/_modules/dscribe/kernels/averagekernel.html @@ -1,22 +1,24 @@ - + dscribe.kernels.averagekernel — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,11 +99,14 @@

Source code for dscribe.kernels.averagekernel

See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np from dscribe.kernels.localsimilaritykernel import LocalSimilarityKernel -
[docs]class AverageKernel(LocalSimilarityKernel): +
+[docs] +class AverageKernel(LocalSimilarityKernel): """Used to compute a global similarity of structures based on the average similarity of local atomic environments in the structure. More precisely, returns the similarity kernel K as: @@ -116,7 +121,9 @@

Source code for dscribe.kernels.averagekernel

constructor. """ -
[docs] def get_global_similarity(self, localkernel): +
+[docs] + def get_global_similarity(self, localkernel): """ Computes the average global similarity between two structures A and B. @@ -128,7 +135,9 @@

Source code for dscribe.kernels.averagekernel

""" K_ij = np.mean(localkernel) - return K_ij
+ return K_ij
+
+
diff --git a/docs/2.1.x/_modules/dscribe/kernels/localsimilaritykernel.html b/docs/2.1.x/_modules/dscribe/kernels/localsimilaritykernel.html index 63edc9e3..5f54cdce 100644 --- a/docs/2.1.x/_modules/dscribe/kernels/localsimilaritykernel.html +++ b/docs/2.1.x/_modules/dscribe/kernels/localsimilaritykernel.html @@ -1,22 +1,24 @@ - + dscribe.kernels.localsimilaritykernel — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,6 +99,7 @@

Source code for dscribe.kernels.localsimilaritykernel

See the License for the specific language governing permissions and limitations under the License. """ + from abc import ABC, abstractmethod import numpy as np @@ -106,7 +109,9 @@

Source code for dscribe.kernels.localsimilaritykernel

from sklearn.metrics.pairwise import pairwise_kernels -
[docs]class LocalSimilarityKernel(ABC): +
+[docs] +class LocalSimilarityKernel(ABC): """An abstract base class for all kernels that use the similarity of local atomic environments to compute a global similarity measure. """ @@ -151,7 +156,9 @@

Source code for dscribe.kernels.localsimilaritykernel

self.kernel_params = kernel_params self.normalize_kernel = normalize_kernel -
[docs] def create(self, x, y=None): +
+[docs] + def create(self, x, y=None): """Creates the kernel matrix based on the given lists of local features x and y. @@ -246,7 +253,10 @@

Source code for dscribe.kernels.localsimilaritykernel

return K_ij
-
[docs] def get_pairwise_matrix(self, X, Y=None): + +
+[docs] + def get_pairwise_matrix(self, X, Y=None): """Calculates the pairwise similarity of atomic environments with scikit-learn, and the pairwise metric configured in the constructor. @@ -265,7 +275,10 @@

Source code for dscribe.kernels.localsimilaritykernel

params = {"gamma": self.gamma, "degree": self.degree, "coef0": self.coef0} return pairwise_kernels(X, Y, metric=self.metric, filter_params=True, **params)
-
[docs] @abstractmethod + +
+[docs] + @abstractmethod def get_global_similarity(self, localkernel): """ Computes the global similarity between two structures A and B. @@ -275,7 +288,9 @@

Source code for dscribe.kernels.localsimilaritykernel

structures A and B, with N and M atoms respectively. Returns: float: Global similarity between the structures A and B. - """
+ """
+
+
diff --git a/docs/2.1.x/_modules/dscribe/kernels/rematchkernel.html b/docs/2.1.x/_modules/dscribe/kernels/rematchkernel.html index 4cb841b0..23ffb67a 100644 --- a/docs/2.1.x/_modules/dscribe/kernels/rematchkernel.html +++ b/docs/2.1.x/_modules/dscribe/kernels/rematchkernel.html @@ -1,22 +1,24 @@ - + dscribe.kernels.rematchkernel — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,11 +99,14 @@

Source code for dscribe.kernels.rematchkernel

See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np from dscribe.kernels.localsimilaritykernel import LocalSimilarityKernel -
[docs]class REMatchKernel(LocalSimilarityKernel): +
+[docs] +class REMatchKernel(LocalSimilarityKernel): """Used to compute a global similarity of structures based on the regularized-entropy match (REMatch) kernel of local atomic environments in the structure. More precisely, returns the similarity kernel K as: @@ -168,7 +173,9 @@

Source code for dscribe.kernels.rematchkernel

self.threshold = threshold super().__init__(metric, gamma, degree, coef0, kernel_params, normalize_kernel) -
[docs] def get_global_similarity(self, localkernel): +
+[docs] + def get_global_similarity(self, localkernel): """ Computes the REMatch similarity between two structures A and B. @@ -211,7 +218,9 @@

Source code for dscribe.kernels.rematchkernel

glosim = np.sum(np.multiply(pity, localkernel)) - return glosim
+ return glosim
+
+
diff --git a/docs/2.1.x/_modules/dscribe/utils/dimensionality.html b/docs/2.1.x/_modules/dscribe/utils/dimensionality.html index 24d76beb..4a89e51c 100644 --- a/docs/2.1.x/_modules/dscribe/utils/dimensionality.html +++ b/docs/2.1.x/_modules/dscribe/utils/dimensionality.html @@ -1,22 +1,24 @@ - + dscribe.utils.dimensionality — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,10 +99,13 @@

Source code for dscribe.utils.dimensionality

See the License for the specific language governing permissions and
 limitations under the License.
 """
+
 import numpy as np
 
 
-
[docs]def is1d(array, dtype=np.integer): +
+[docs] +def is1d(array, dtype=np.integer): try: for i in array: if not np.issubdtype(type(i), dtype): @@ -110,7 +115,10 @@

Source code for dscribe.utils.dimensionality

return True
-
[docs]def is2d(array, dtype=np.integer): + +
+[docs] +def is2d(array, dtype=np.integer): try: for i in array: for j in i: @@ -119,6 +127,7 @@

Source code for dscribe.utils.dimensionality

except Exception:
         return False
     return True
+
diff --git a/docs/2.1.x/_modules/dscribe/utils/geometry.html b/docs/2.1.x/_modules/dscribe/utils/geometry.html index 41c97a49..cf387312 100644 --- a/docs/2.1.x/_modules/dscribe/utils/geometry.html +++ b/docs/2.1.x/_modules/dscribe/utils/geometry.html @@ -1,22 +1,24 @@ - + dscribe.utils.geometry — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,6 +99,7 @@

Source code for dscribe.utils.geometry

 See the License for the specific language governing permissions and
 limitations under the License.
 """
+
 import numpy as np
 
 import scipy.sparse
@@ -105,7 +108,9 @@ 

Source code for dscribe.utils.geometry

 from ase import Atoms
 
 
-
[docs]def get_adjacency_matrix(radius, pos1, pos2=None, output_type="coo_matrix"): +
+[docs] +def get_adjacency_matrix(radius, pos1, pos2=None, output_type="coo_matrix"): """Calculates a sparse adjacency matrix by only considering distances within a certain cutoff. Uses a k-d tree to reach O(n log(N)) time complexity. @@ -147,7 +152,10 @@

Source code for dscribe.utils.geometry

     return dmat
-
[docs]def get_adjacency_list(adjacency_matrix): + +
+[docs] +def get_adjacency_list(adjacency_matrix): """Used to transform an adjacency matrix into an adjacency list. The adjacency list provides much faster access to the neighbours of a node. @@ -172,7 +180,10 @@

Source code for dscribe.utils.geometry

     return adjacency_list
-
[docs]def get_extended_system(system, radial_cutoff, centers=None, return_cell_indices=False): + +
+[docs] +def get_extended_system(system, radial_cutoff, centers=None, return_cell_indices=False): """Used to create a periodically extended system. If centers are not specified, simply takes returns the original system multiplied by an integer amount of times in each direction to cover the radial cutoff. If @@ -306,6 +317,7 @@

Source code for dscribe.utils.geometry

         )
 
         return extended_system, cell_indices
+
diff --git a/docs/2.1.x/_modules/dscribe/utils/species.html b/docs/2.1.x/_modules/dscribe/utils/species.html index b63c1c31..2969323a 100644 --- a/docs/2.1.x/_modules/dscribe/utils/species.html +++ b/docs/2.1.x/_modules/dscribe/utils/species.html @@ -1,22 +1,24 @@ - + dscribe.utils.species — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,11 +99,14 @@

Source code for dscribe.utils.species

 See the License for the specific language governing permissions and
 limitations under the License.
 """
+
 import numpy as np
 import ase.data
 
 
-
[docs]def symbols_to_numbers(symbols): +
+[docs] +def symbols_to_numbers(symbols): """Transforms a set of chemical symbols into the corresponding atomic numbers. @@ -125,7 +130,10 @@

Source code for dscribe.utils.species

     return np.array(numbers, dtype=int)
-
[docs]def get_atomic_numbers(species): + +
+[docs] +def get_atomic_numbers(species): """Given a list of chemical species either as a atomic numbers or chemical symbols, return the correponding list of ordered atomic numbers with duplicates removed. @@ -161,6 +169,7 @@

Source code for dscribe.utils.species

     new_atomic_numbers = np.array(sorted(list(set(atomic_numbers))))
 
     return new_atomic_numbers
+
diff --git a/docs/2.1.x/_modules/dscribe/utils/stats.html b/docs/2.1.x/_modules/dscribe/utils/stats.html index 7dd50a66..4f456c6a 100644 --- a/docs/2.1.x/_modules/dscribe/utils/stats.html +++ b/docs/2.1.x/_modules/dscribe/utils/stats.html @@ -1,22 +1,24 @@ - + dscribe.utils.stats — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -97,12 +99,15 @@

Source code for dscribe.utils.stats

 See the License for the specific language governing permissions and
 limitations under the License.
 """
+
 from ase import Atoms
 from dscribe.core.system import System
 import numpy as np
 
 
-
[docs]def system_stats(system_iterator): +
+[docs] +def system_stats(system_iterator): """ Args: system_stats(iterable containing ASE.Atoms or System): The atomic @@ -164,6 +169,7 @@

Source code for dscribe.utils.stats

         "element_symbols": list(symbols),
         "min_distance": min_distance,
     }
+
diff --git a/docs/2.1.x/_modules/index.html b/docs/2.1.x/_modules/index.html index 9510f925..21ccebb9 100644 --- a/docs/2.1.x/_modules/index.html +++ b/docs/2.1.x/_modules/index.html @@ -1,22 +1,24 @@ - + Overview: module code — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + diff --git a/docs/2.1.x/_sources/changelog.rst.txt b/docs/2.1.x/_sources/changelog.rst.txt index 45d608f2..657dddee 100644 --- a/docs/2.1.x/_sources/changelog.rst.txt +++ b/docs/2.1.x/_sources/changelog.rst.txt @@ -1,5 +1,11 @@ Changelog ========= + - 2.1.1: + - Added: + - Better validation of the input system, including checks and possible normalization of positions, cell, atomic numbers and periodic boundary conditions. + - Fixed: + - Issue with ACSF G5 calculation. See issue `#138 `_. + - 2.1.0: - Added: - New :code:`compression` option for :code:`SOAP` courtesy of `jlparkI `_. @@ -10,7 +16,7 @@ Changelog - Added: - Wheel distributions for Linux, MacOS and Windows. - Fixed: - - Issue with exception not being raised when analytical derivatives were requested for SOAP with weighting turned on. See issue `#89 `_. + - Issue with exception not being raised when analytical derivatives were requested for SOAP with weighting turned on. See issue `#113 `_. - 2.0.0: - Added: diff --git a/docs/2.1.x/_sources/index.rst.txt b/docs/2.1.x/_sources/index.rst.txt index 129c8251..eb66db6b 100644 --- a/docs/2.1.x/_sources/index.rst.txt +++ b/docs/2.1.x/_sources/index.rst.txt @@ -7,8 +7,8 @@ DScribe .. image:: https://coveralls.io/repos/github/SINGROUP/dscribe/badge.svg?branch=master :target: https://coveralls.io/github/SINGROUP/dscribe?branch=master -.. image:: https://img.shields.io/badge/code%20style-black-000000.svg - :target: https://github.com/psf/black +.. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json + :target: https://github.com/astral-sh/ruff DScribe is a Python package for transforming atomic structures into fixed-size numerical fingerprints. These fingerprints are often called "descriptors" and diff --git a/docs/2.1.x/_static/basic.css b/docs/2.1.x/_static/basic.css index 7577acb1..f316efcb 100644 --- a/docs/2.1.x/_static/basic.css +++ b/docs/2.1.x/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -237,6 +237,10 @@ a.headerlink { visibility: hidden; } +a:visited { + color: #551A8B; +} + h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, @@ -670,6 +674,16 @@ dd { margin-left: 30px; } +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + dl > dd:last-child, dl > dd:last-child > :last-child { margin-bottom: 0; @@ -738,6 +752,14 @@ abbr, acronym { cursor: help; } +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + /* -- code displays --------------------------------------------------------- */ pre { diff --git a/docs/2.1.x/_static/css/theme.css b/docs/2.1.x/_static/css/theme.css index c03c88f0..19a446a0 100644 --- a/docs/2.1.x/_static/css/theme.css +++ b/docs/2.1.x/_static/css/theme.css @@ -1,4 +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{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.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 + */@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/2.1.x/_static/doctools.js b/docs/2.1.x/_static/doctools.js index d06a71d7..4d67807d 100644 --- a/docs/2.1.x/_static/doctools.js +++ b/docs/2.1.x/_static/doctools.js @@ -4,7 +4,7 @@ * * Base JavaScript utilities for all Sphinx HTML documentation. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/docs/2.1.x/_static/documentation_options.js b/docs/2.1.x/_static/documentation_options.js index 124fa162..7f629c06 100644 --- a/docs/2.1.x/_static/documentation_options.js +++ b/docs/2.1.x/_static/documentation_options.js @@ -1,5 +1,4 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), +const DOCUMENTATION_OPTIONS = { VERSION: '2.1.x', LANGUAGE: 'en', COLLAPSE_INDEX: false, diff --git a/docs/2.1.x/_static/language_data.js b/docs/2.1.x/_static/language_data.js index 250f5665..367b8ed8 100644 --- a/docs/2.1.x/_static/language_data.js +++ b/docs/2.1.x/_static/language_data.js @@ -5,7 +5,7 @@ * This script contains the language-specific data used by searchtools.js, * namely the list of stopwords, stemmer, scorer and splitter. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -13,7 +13,7 @@ var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; -/* Non-minified version is copied as a separate JS file, is available */ +/* Non-minified version is copied as a separate JS file, if available */ /** * Porter Stemmer diff --git a/docs/2.1.x/_static/pygments.css b/docs/2.1.x/_static/pygments.css index 691aeb82..0d49244e 100644 --- a/docs/2.1.x/_static/pygments.css +++ b/docs/2.1.x/_static/pygments.css @@ -17,6 +17,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: .highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #A00000 } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #FF0000 } /* Generic.Error */ .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .highlight .gi { color: #00A000 } /* Generic.Inserted */ diff --git a/docs/2.1.x/_static/searchtools.js b/docs/2.1.x/_static/searchtools.js index 97d56a74..92da3f8b 100644 --- a/docs/2.1.x/_static/searchtools.js +++ b/docs/2.1.x/_static/searchtools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for the full-text search. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -57,12 +57,12 @@ const _removeChildren = (element) => { const _escapeRegExp = (string) => string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -const _displayItem = (item, searchTerms) => { +const _displayItem = (item, searchTerms, highlightTerms) => { const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; - const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; const [docName, title, anchor, descr, score, _filename] = item; @@ -75,28 +75,35 @@ const _displayItem = (item, searchTerms) => { if (dirname.match(/\/index\/$/)) dirname = dirname.substring(0, dirname.length - 6); else if (dirname === "index/") dirname = ""; - requestUrl = docUrlRoot + dirname; + requestUrl = contentRoot + dirname; linkUrl = requestUrl; } else { // normal html builders - requestUrl = docUrlRoot + docName + docFileSuffix; + requestUrl = contentRoot + docName + docFileSuffix; linkUrl = docName + docLinkSuffix; } let linkEl = listItem.appendChild(document.createElement("a")); linkEl.href = linkUrl + anchor; linkEl.dataset.score = score; linkEl.innerHTML = title; - if (descr) + if (descr) { listItem.appendChild(document.createElement("span")).innerHTML = " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } else if (showSearchSummary) fetch(requestUrl) .then((responseData) => responseData.text()) .then((data) => { if (data) listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) + Search.makeSearchSummary(data, searchTerms, anchor) ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); }); Search.output.appendChild(listItem); }; @@ -109,26 +116,43 @@ const _finishSearch = (resultCount) => { ); else Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); }; const _displayNextItem = ( results, resultCount, - searchTerms + searchTerms, + highlightTerms, ) => { // results left, load the summary and display it // this is intended to be dynamic (don't sub resultsCount) if (results.length) { - _displayItem(results.pop(), searchTerms); + _displayItem(results.pop(), searchTerms, highlightTerms); setTimeout( - () => _displayNextItem(results, resultCount, searchTerms), + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), 5 ); } // search finished, update title and status message else _finishSearch(resultCount); }; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; /** * Default splitQuery function. Can be overridden in ``sphinx.search`` with a @@ -152,13 +176,26 @@ const Search = { _queued_query: null, _pulse_status: -1, - htmlToText: (htmlString) => { + htmlToText: (htmlString, anchor) => { const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + for (const removalQuery of [".headerlinks", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; + if (docContent) return docContent.textContent; + console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." ); return ""; }, @@ -231,16 +268,7 @@ const Search = { else Search.deferQuery(query); }, - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - + _parseQuery: (query) => { // stem the search terms and add them to the correct list const stemmer = new Stemmer(); const searchTerms = new Set(); @@ -276,16 +304,32 @@ const Search = { // console.info("required: ", [...searchTerms]); // console.info("excluded: ", [...excludedTerms]); - // array of [docname, title, anchor, descr, score, filename] - let results = []; + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + _removeChildren(document.getElementById("search-progress")); - const queryLower = query.toLowerCase(); + const queryLower = query.toLowerCase().trim(); for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { for (const [file, id] of foundTitles) { let score = Math.round(100 * queryLower.length / title.length) - results.push([ + normalResults.push([ docNames[file], titles[file] !== title ? `${titles[file]} > ${title}` : title, id !== null ? "#" + id : "", @@ -300,46 +344,47 @@ const Search = { // search for explicit entries in index directives for (const [entry, foundEntries] of Object.entries(indexEntries)) { if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ docNames[file], titles[file], id ? "#" + id : "", null, score, filenames[file], - ]); + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } } } } // lookup as object objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) + normalResults.push(...Search.performObjectSearch(term, objectTerms)) ); // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; // remove duplicate search results // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept @@ -353,14 +398,19 @@ const Search = { return acc; }, []); - results = results.reverse(); + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); // for debugging //Search.lastresults = results.slice(); // a copy // console.info("search results:", Search.lastresults); // print the results - _displayNextItem(results, results.length, searchTerms); + _displayNextItem(results, results.length, searchTerms, highlightTerms); }, /** @@ -458,14 +508,18 @@ const Search = { // add support for partial matches if (word.length > 2) { const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } } // no match but word was a required one @@ -488,9 +542,8 @@ const Search = { // create the mapping files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); }); }); @@ -541,8 +594,8 @@ const Search = { * search summary for a given text. keywords is a list * of stemmed words. */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); if (text === "") return null; const textLower = text.toLowerCase(); diff --git a/docs/2.1.x/_static/sphinx_highlight.js b/docs/2.1.x/_static/sphinx_highlight.js index aae669d7..8a96c69a 100644 --- a/docs/2.1.x/_static/sphinx_highlight.js +++ b/docs/2.1.x/_static/sphinx_highlight.js @@ -29,14 +29,19 @@ const _highlight = (node, addItems, text, className) => { } span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); parent.insertBefore( span, parent.insertBefore( - document.createTextNode(val.substr(pos + text.length)), + rest, node.nextSibling ) ); node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); if (isInSVG) { const rect = document.createElementNS( @@ -140,5 +145,10 @@ const SphinxHighlight = { }, }; -_ready(SphinxHighlight.highlightSearchWords); -_ready(SphinxHighlight.initEscapeListener); +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/2.1.x/about.html b/docs/2.1.x/about.html index 4a051887..d9ec5037 100644 --- a/docs/2.1.x/about.html +++ b/docs/2.1.x/about.html @@ -1,23 +1,25 @@ - + - + About — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -90,26 +92,26 @@
-

About

+

About

-

Authors

+

Authors

This package is developed at Aalto University, Department of Applied Physics by the Computational Electronic Structure Theory (CEST) and Surfaces and Interfaces at the Nanoscale (SIN) groups.

-

Contact

+

Contact

If you encounter issues with the software please submit them directly as GitHub issues. For general discussion and possible improvements/additions use the GitHub discussion forum. This ensures that all issues/discussion are publicly available and archived.

-

License

+

License

The software is licensed under the Apache License, Version 2.0

-

Funding

+

Funding

This project has received funding from the Jenny and Antti Wihuri Foundation and the European Union’s Horizon 2020 research and innovation programme under grant agreements number no. 676580 NOMAD and no. 686053 CRITCAT.

diff --git a/docs/2.1.x/api.html b/docs/2.1.x/api.html index fb5d6be7..9a4ae5a2 100644 --- a/docs/2.1.x/api.html +++ b/docs/2.1.x/api.html @@ -1,23 +1,26 @@ - + - + API — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + + @@ -88,7 +91,7 @@
-

API

+

API

Here you can find more detailed documentation of the the code as extracted from the docstrings.

@@ -213,10 +216,11 @@
  • ACSFWrapper
  • CellList
      diff --git a/docs/2.1.x/changelog.html b/docs/2.1.x/changelog.html index 0602b4fb..6843498f 100644 --- a/docs/2.1.x/changelog.html +++ b/docs/2.1.x/changelog.html @@ -1,23 +1,25 @@ - + - + Changelog — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -85,10 +87,30 @@
      -

      Changelog

      +

      Changelog

      • +
        2.1.1:
          +
        • +
          Added:
            +
          • Better validation of the input system, including checks and possible normalization of positions, cell, atomic numbers and periodic boundary conditions.

          • +
          +
          +
          +
        • +
        • +
          Fixed:
            +
          • Issue with ACSF G5 calculation. See issue #138.

          • +
          +
          +
          +
        • +
        +
        +
        +
      • +
      • 2.1.0:
        • Added:
          diff --git a/docs/2.1.x/citing.html b/docs/2.1.x/citing.html index eaf5affb..9cd4f52e 100644 --- a/docs/2.1.x/citing.html +++ b/docs/2.1.x/citing.html @@ -1,23 +1,25 @@ - + - + Citing DScribe — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -85,7 +87,7 @@
          -

          Citing DScribe

          +

          Citing DScribe

          When using versions < 2.0.0, please consider citing the article:

          @article{dscribe,
             author = {Himanen, Lauri and J{\"a}ger, Marc O.~J. and Morooka, Eiaki V. and Federici Canova, Filippo and Ranawat, Yashasvi S. and Gao, David Z. and Rinke, Patrick and Foster, Adam S.},
          diff --git a/docs/2.1.x/contributing.html b/docs/2.1.x/contributing.html
          index 0651ffd8..ef3c10bb 100644
          --- a/docs/2.1.x/contributing.html
          +++ b/docs/2.1.x/contributing.html
          @@ -1,23 +1,25 @@
           
          -
          +
           
          -  
          +  
           
             
             Contributing — DScribe 2.1.x documentation
          -      
          -      
          -      
          +      
          +      
          +      
          +
          +  
             
             
          -        
          -        
          -        
          -        
          -        
          -        
          +        
          +        
          +        
          +        
          +        
          +        
               
               
               
          @@ -88,7 +90,7 @@
                      
          -

          Contributing

          +

          Contributing

          Follow these general instructions if you wish to contribute a new descriptor implementation to DScribe:

          @@ -114,7 +116,7 @@

          Contributing -

          Code style guideline

          +

          Code style guideline

          • We follow the Black code style, diff --git a/docs/2.1.x/doc/dscribe.core.html b/docs/2.1.x/doc/dscribe.core.html index 5790d7bf..4ddccce2 100644 --- a/docs/2.1.x/doc/dscribe.core.html +++ b/docs/2.1.x/doc/dscribe.core.html @@ -1,23 +1,25 @@ - + - + dscribe.core package — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -88,12 +90,12 @@

            -

            dscribe.core package

            +

            dscribe.core package

            -

            Submodules

            +

            Submodules

            -

            dscribe.core.lattice module

            +

            dscribe.core.lattice module

            Copyright 2019 DScribe developers

            Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -108,8 +110,8 @@

            Submodules
            -class dscribe.core.lattice.Lattice(matrix)[source]
            -

            Bases: object

            +class dscribe.core.lattice.Lattice(matrix)[source] +

            Bases: object

            A lattice object. Essentially a matrix with conversion matrices. In general, it is assumed that length units are in Angstroms and angles are in degrees unless otherwise stated.

            @@ -131,13 +133,13 @@

            Submodules
            -property abc
            +property abc

            Lengths of the lattice vectors, i.e. (a, b, c)

        -get_cartesian_coords(fractional_coords)[source]
        +get_cartesian_coords(fractional_coords)[source]

        Returns the cartesian coordinates given fractional coordinates.

        Parameters:
        @@ -151,7 +153,7 @@

        Submodules
        -get_fractional_coords(cart_coords)[source]
        +get_fractional_coords(cart_coords)[source]

        Returns the fractional coordinates given cartesian coordinates.

        Parameters:
        @@ -165,7 +167,7 @@

        Submodules
        -get_points_in_sphere(frac_points, center, r, zip_results=True)[source]
        +get_points_in_sphere(frac_points, center, r, zip_results=True)[source]

        Find all points within a sphere from the point taking into account periodic boundary conditions. This includes sites in other periodic images.

        @@ -186,7 +188,7 @@

        Submodulesbool) – Whether to zip the results together to group by +
      • zip_results (bool) – Whether to zip the results together to group by point, or return the raw fcoord, dist, index arrays

      @@ -207,24 +209,24 @@

      Submodules
      -property inv_matrix
      +property inv_matrix

      Inverse of lattice matrix.

      -property lengths
      +property lengths
      -property matrix
      +property matrix

      Copy of matrix representing the Lattice

      -property reciprocal_lattice
      +property reciprocal_lattice

      Return the reciprocal lattice. Note that this is the standard reciprocal lattice used for solid state physics with a factor of 2 * pi. If you are looking for the crystallographic reciprocal lattice, @@ -234,7 +236,7 @@

      Submodules
      -property reciprocal_lattice_crystallographic
      +property reciprocal_lattice_crystallographic

      Returns the crystallographic reciprocal lattice, i.e., no factor of 2 * pi.

      @@ -243,7 +245,7 @@

      Submodules -

      dscribe.core.system module

      +

      dscribe.core.system module

      Copyright 2019 DScribe developers

      Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -258,7 +260,7 @@

      Submodules
      -class dscribe.core.system.System(symbols=None, positions=None, numbers=None, tags=None, momenta=None, masses=None, magmoms=None, charges=None, scaled_positions=None, cell=None, pbc=None, celldisp=None, constraint=None, calculator=None, info=None, wyckoff_positions=None, equivalent_atoms=None)[source]
      +class dscribe.core.system.System(symbols=None, positions=None, numbers=None, tags=None, momenta=None, masses=None, magmoms=None, charges=None, scaled_positions=None, cell=None, pbc=None, celldisp=None, constraint=None, calculator=None, info=None, wyckoff_positions=None, equivalent_atoms=None)[source]

      Bases: Atoms

      Represents atomic systems that are used internally by the package. Inherits from the ase.Atoms class, but adds the possibility to cache @@ -266,19 +268,19 @@

      Submodules
      -static from_atoms(atoms)[source]
      +static from_atoms(atoms)[source]

      Creates a System object from ASE.Atoms object.

      -get_cell_inverse()[source]
      +get_cell_inverse()[source]

      Get the matrix inverse of the lattice matrix.

      -get_displacement_tensor()[source]
      +get_displacement_tensor()[source]

      A matrix where the entry A[i, j, :] is the vector self.cartesian_pos[j] - self.cartesian_pos[i].

      For periodic systems the distance of an atom from itself is the @@ -297,7 +299,7 @@

      Submodules
      -get_distance_matrix()[source]
      +get_distance_matrix()[source]

      Calculates the distance matrix A defined as:

      \[A_{ij} = \lvert \mathbf{r}_i - \mathbf{r}_j \rvert\]
      @@ -317,16 +319,16 @@

      Submodules
      -get_distance_matrix_within_radius(radius, pos=None, output_type='coo_matrix')[source]
      +get_distance_matrix_within_radius(radius, pos=None, output_type='coo_matrix')[source]

      Calculates a sparse distance matrix by only considering distances within a certain cutoff. Uses a k-d tree to reach O(n log(N)) time complexity.

      Parameters:
        -
      • radius (float) – The cutoff radius within which distances are +

      • radius (float) – The cutoff radius within which distances are calculated. Distances outside this radius are not included.

      • -
      • output_type (str) – Which container to use for output data. Options: +

      • output_type (str) – Which container to use for output data. Options: “dok_matrix”, “coo_matrix”, “dict”, or “ndarray”. Default: “dok_matrix”.

      @@ -336,14 +338,14 @@

      SubmodulesReturn type: -

      dok_matrix | np.array | coo_matrix | dict

      +

      dok_matrix | np.array | coo_matrix | dict

      -get_inverse_distance_matrix()[source]
      +get_inverse_distance_matrix()[source]

      Calculates the inverse distance matrix A defined as:

      \[A_{ij} = \frac{1}{\lvert \mathbf{r}_i - \mathbf{r}_j \rvert }\]
      @@ -364,7 +366,7 @@

      Submodules
      -set_cell(cell, scale_atoms=False)[source]
      +set_cell(cell, scale_atoms=False)[source]

      Set unit cell vectors.

      Parameters:

      @@ -407,26 +409,26 @@

      Submodules
      -set_pbc(pbc)[source]
      +set_pbc(pbc)[source]

      Set periodic boundary condition flags.

      -set_positions(newpositions, apply_constraint=True)[source]
      +set_positions(newpositions, apply_constraint=True)[source]

      Set positions, honoring any constraints. To ignore constraints, use apply_constraint=False.

      -set_scaled_positions(scaled)[source]
      +set_scaled_positions(scaled)[source]

      Set positions relative to unit cell.

      -to_cartesian(scaled_positions, wrap=False)[source]
      +to_cartesian(scaled_positions, wrap=False)[source]

      Used to transform a set of relative positions to the cartesian basis defined by the cell of this system.

      @@ -448,7 +450,7 @@

      Submodules
      -to_scaled(positions, wrap=False)[source]
      +to_scaled(positions, wrap=False)[source]

      Used to transform a set of positions to the basis defined by the cell of this system.

      @@ -472,7 +474,7 @@

      Submodules -

      Module contents

      +

      Module contents

      Copyright 2019 DScribe developers

      Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. diff --git a/docs/2.1.x/doc/dscribe.descriptors.html b/docs/2.1.x/doc/dscribe.descriptors.html index 45c7d3a6..bfc54905 100644 --- a/docs/2.1.x/doc/dscribe.descriptors.html +++ b/docs/2.1.x/doc/dscribe.descriptors.html @@ -1,23 +1,25 @@ - + - + dscribe.descriptors package — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -88,12 +90,12 @@

      -

      dscribe.descriptors package

      +

      dscribe.descriptors package

      -

      Submodules

      +

      Submodules

      -

      dscribe.descriptors.acsf module

      +

      dscribe.descriptors.acsf module

      Copyright 2019 DScribe developers

      Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -108,7 +110,7 @@

      Submodules
      -class dscribe.descriptors.acsf.ACSF(r_cut, g2_params=None, g3_params=None, g4_params=None, g5_params=None, species=None, periodic=False, sparse=False, dtype='float64')[source]
      +class dscribe.descriptors.acsf.ACSF(r_cut, g2_params=None, g3_params=None, g4_params=None, g5_params=None, species=None, periodic=False, sparse=False, dtype='float64')[source]

      Bases: DescriptorLocal

      Implementation of Atom-Centered Symmetry Functions.

      Notice that the species of the central atom is not encoded in the output, @@ -123,7 +125,7 @@

      Submodules
      Parameters:
        -
      • r_cut (float) – The smooth cutoff value in angstroms. This cutoff +

      • r_cut (float) – The smooth cutoff value in angstroms. This cutoff value is used throughout the calculations for all symmetry functions.

      • g2_params (n*2 np.ndarray) – A list of pairs of \(\eta\) and @@ -141,38 +143,38 @@

        Submodulesbool) – Set to true if you want the descriptor output to +
      • periodic (bool) – Set to true if you want the descriptor output to respect the periodicity of the atomic systems (see the pbc-parameter in the constructor of ase.Atoms).

      • -
      • sparse (bool) – Whether the output should be a sparse matrix or a +

      • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

      -create(system, centers=None, n_jobs=1, only_physical_cores=False, verbose=False)[source]
      +create(system, centers=None, n_jobs=1, only_physical_cores=False, verbose=False)[source]

      Return the ACSF output for the given systems and given centers.

      Parameters:
      • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

      • -
      • centers (list) – Indices of the atoms to use as ACSF centers. If no +

      • centers (list) – Indices of the atoms to use as ACSF centers. If no centers are defined, the output will be created for all atoms in the system. When calculating output for multiple systems, provide the centers as a list for each system.

      • -
      • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

      • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

      • -
      • only_physical_cores (bool) – If a negative n_jobs is given, +

      • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

      • -
      • verbose (bool) – Controls whether to print the progress of each job +

      • verbose (bool) – Controls whether to print the progress of each job into to the console.

      @@ -193,7 +195,7 @@

      Submodules
      -create_single(system, centers=None)[source]
      +create_single(system, centers=None)[source]

      Creates the descriptor for the given system.

      Parameters:
      @@ -217,27 +219,27 @@

      Submodules
      -property g2_params
      +property g2_params

      -property g3_params
      +property g3_params
      -property g4_params
      +property g4_params
      -property g5_params
      +property g5_params
      -get_number_of_features()[source]
      +get_number_of_features()[source]

      Used to inquire the final number of features that this descriptor will have.

      @@ -245,33 +247,91 @@

      Submodules

      Number of features for this descriptor.

      Return type:
      -

      int

      +

      int

      -property r_cut
      +property r_cut
      -property species
      +property species
      -validate_derivatives_method(method, attach)[source]
      +validate_derivatives_method(method, attach)[source]

      Used to validate and determine the final method for calculating the derivatives.

      +
      +
      +validate_g2_params(value)[source]
      +

      Used to check the validity of given G2 parameters.

      +
      +
      Parameters:
      +

      value (n*3 array) – List of G2 parameters.

      +
      +
      +
      + +
      +
      +validate_g3_params(value)[source]
      +

      Used to check the validity of given G3 parameters and to +initialize the C-memory layout for them.

      +
      +
      Parameters:
      +

      value (array) – List of G3 parameters.

      +
      +
      +
      + +
      +
      +validate_g4_params(value)[source]
      +

      Used to check the validity of given G4 parameters and to +initialize the C-memory layout for them.

      +
      +
      Parameters:
      +

      value (n*3 array) – List of G4 parameters.

      +
      +
      +
      + +
      +
      +validate_g5_params(value)[source]
      +

      Used to check the validity of given G5 parameters and to +initialize the C-memory layout for them.

      +
      +
      Parameters:
      +

      value (n*3 array) – List of G5 parameters.

      +
      +
      +
      + +
      +
      +validate_r_cut(value)[source]
      +

      Used to check the validity of given radial cutoff.

      +
      +
      Parameters:
      +

      value (float) – Radial cutoff.

      +
      +
      +
      +

      -

      dscribe.descriptors.coulombmatrix module

      +

      dscribe.descriptors.coulombmatrix module

      Copyright 2019 DScribe developers

      Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -286,7 +346,7 @@

      Submodules
      -class dscribe.descriptors.coulombmatrix.CoulombMatrix(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False)[source]
      +class dscribe.descriptors.coulombmatrix.CoulombMatrix(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False)[source]

      Bases: DescriptorMatrix

      Calculates the zero padded Coulomb matrix.

      The Coulomb matrix is defined as:

      @@ -315,7 +375,7 @@

      Submodules
      Parameters:
        -
      • n_atoms_max (int) – The maximum nuber of atoms that any of the +

      • n_atoms_max (int) – The maximum nuber of atoms that any of the samples can have. This controls how much zeros need to be padded to the final result.

      • permutation (string) –

        Defines the method for handling permutational @@ -334,38 +394,38 @@

        Submodulesfloat) – Provide only when using the random-permutation +
      • sigma (float) – Provide only when using the random-permutation option. Standard deviation of the gaussian distributed noise determining how much the rows and columns of the randomly sorted matrix are scrambled.

      • -
      • seed (int) – Provide only when using the random-permutation +

      • seed (int) – Provide only when using the random-permutation option. A seed to use for drawing samples from a normal distribution.

      • -
      • sparse (bool) – Whether the output should be a sparse matrix or a +

      • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

      -create(system, n_jobs=1, only_physical_cores=False, verbose=False)[source]
      +create(system, n_jobs=1, only_physical_cores=False, verbose=False)[source]

      Return the Coulomb matrix for the given systems.

      Parameters:
      • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

      • -
      • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

      • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

      • -
      • only_physical_cores (bool) – If a negative n_jobs is given, +

      • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

      • -
      • verbose (bool) – Controls whether to print the progress of each job +

      • verbose (bool) – Controls whether to print the progress of each job into to the console.

      @@ -382,7 +442,7 @@

      Submodules
      -create_single(system)[source]
      +create_single(system)[source]
      Parameters:

      system (ase.Atoms) – Input system.

      @@ -398,7 +458,7 @@

      Submodules
      -derivatives_numerical(d, c, system, indices, return_descriptor=True)[source]
      +derivatives_numerical(d, c, system, indices, return_descriptor=True)[source]

      Return the numerical derivatives for the given system. :param system: Atomic structure. :type system: ase.Atoms @@ -408,7 +468,7 @@

      Submodules
      Parameters:
      -

      return_descriptor (bool) – Whether to also calculate the descriptor +

      return_descriptor (bool) – Whether to also calculate the descriptor in the same function call. This is true by default as it typically is faster to calculate both in one go.

      @@ -429,7 +489,7 @@

      Submodules -

      dscribe.descriptors.descriptor module

      +

      dscribe.descriptors.descriptor module

      Copyright 2019 DScribe developers

      Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -444,39 +504,21 @@

      Submodules
      -class dscribe.descriptors.descriptor.Descriptor(periodic, sparse, dtype='float64')[source]
      -

      Bases: ABC

      +class dscribe.descriptors.descriptor.Descriptor(periodic, sparse, dtype='float64')[source] +

      Bases: ABC

      An abstract base class for all descriptors.

      Parameters:
        -
      • periodic (bool) – Whether the descriptor should take PBC into account.

      • -
      • sparse (bool) – Whether the output should use a sparse format.

      • -
      • dtype (str) – The output data type.

      • -
      -
      -
      -
      -
      -check_atomic_numbers(atomic_numbers)[source]
      -

      Used to check that the given atomic numbers have been defined for -this descriptor.

      -
      -
      Parameters:
      -

      species (iterable) – Atomic numbers to check.

      -
      -
      Raises:
      -
        -
      • ValueError – If the atomic numbers in the given system are not

      • -
      • included in the species given to this descriptor.

      • +
      • periodic (bool) – Whether the descriptor should take PBC into account.

      • +
      • sparse (bool) – Whether the output should use a sparse format.

      • +
      • dtype (str) – The output data type.

      -
      -
      -abstract create(system, *args, **kwargs)[source]
      +abstract create(system, *args, **kwargs)[source]

      Creates the descriptor for the given systems.

      Parameters:
      @@ -497,33 +539,33 @@

      Submodules
      -create_parallel(inp, func, n_jobs, static_size=None, only_physical_cores=False, verbose=False, prefer='processes')[source]
      +create_parallel(inp, func, n_jobs, static_size=None, only_physical_cores=False, verbose=False, prefer='processes')[source]

      Used to parallelize the descriptor creation across multiple systems.

      Parameters:
        -
      • inp (list) – Contains a tuple of input arguments for each processed +

      • inp (list) – Contains a tuple of input arguments for each processed system. These arguments are fed to the function specified by “func”.

      • func (function) – Function that outputs the descriptor when given input arguments from “inp”.

      • -
      • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

      • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the number of jobs will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

      • -
      • output_sizes (list of ints) – The size of the output for each job. +

      • output_sizes (list of ints) – The size of the output for each job. Makes the creation faster by preallocating the correct amount of memory beforehand. If not specified, a dynamically created list of outputs is used.

      • -
      • only_physical_cores (bool) – If a negative n_jobs is given, +

      • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

      • -
      • verbose (bool) – Controls whether to print the progress of each job +

      • verbose (bool) – Controls whether to print the progress of each job into to the console.

      • -
      • prefer (str) –

        The parallelization method. Valid options are:

        +
      • prefer (str) –

        The parallelization method. Valid options are:

      -derivatives_parallel(inp, func, n_jobs, derivatives_shape, descriptor_shape, return_descriptor, only_physical_cores=False, verbose=False, prefer='processes')[source]
      +derivatives_parallel(inp, func, n_jobs, derivatives_shape, descriptor_shape, return_descriptor, only_physical_cores=False, verbose=False, prefer='processes')[source]

      Used to parallelize the descriptor creation across multiple systems.

      Parameters:
        -
      • inp (list) – Contains a tuple of input arguments for each processed +

      • inp (list) – Contains a tuple of input arguments for each processed system. These arguments are fed to the function specified by “func”.

      • func (function) – Function that outputs the descriptor when given input arguments from “inp”.

      • -
      • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

      • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the number of jobs will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

      • -
      • derivatives_shape (list or None) – If a fixed size output is produced from +

      • derivatives_shape (list or None) – If a fixed size output is produced from each job, this contains its shape. For variable size output this parameter is set to None

      • derivatives_shape – If a fixed size output is produced from each job, this contains its shape. For variable size output this parameter is set to None

      • -
      • only_physical_cores (bool) – If a negative n_jobs is given, +

      • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

      • -
      • verbose (bool) – Controls whether to print the progress of each job +

      • verbose (bool) – Controls whether to print the progress of each job into to the console.

      • -
      • prefer (str) –

        The parallelization method. Valid options are:

        +
      • prefer (str) –

        The parallelization method. Valid options are:

      -format_array(input)[source]
      +format_array(input)[source]

      Used to format a float64 numpy array in the final format that will be returned to the user.

      -abstract get_number_of_features()[source]
      +abstract get_number_of_features()[source]

      Used to inquire the final number of features that this descriptor will have.

      @@ -626,33 +668,112 @@

      Submodules

      Number of features for this descriptor.

      Return type:
      -

      int

      +

      int

      -property periodic
      +property periodic
      -property sparse
      +property sparse
      +
      +
      +validate_atomic_numbers(atomic_numbers)[source]
      +

      Used to check that the given atomic numbers have been defined for +this descriptor.

      +
      +
      Parameters:
      +

      species (iterable) – Atomic numbers to check.

      +
      +
      Raises:
      +
        +
      • ValueError – If the atomic numbers in the given system are not

      • +
      • included in the species given to this descriptor.

      • +
      +
      +
      +
      + +
      +
      +validate_cell(cell, pbc)[source]
      +

      Used to check that the given unit cell is valid.

      +
      +
      Parameters:
      +
        +
      • cell (np.ndarray) – 3x3 unit cell.

      • +
      • pbc (np.ndarray) – Cell periodicity as three booleans.

      • +
      +
      +
      Raises:
      +

      ValueError – If the given cell is invalid.

      +
      +
      +
      +
      -validate_derivatives_method(method)[source]
      +validate_derivatives_method(method)[source]

      Used to validate and determine the final method for calculating the derivatives.

      +
      +
      +validate_pbc(pbc)[source]
      +

      Used to check that the given pbc cell is valid and return a +normalized value.

      +
      +
      Parameters:
      +

      pbc (np.ndarray) – Cell periodicity as three booleans.

      +
      +
      +
      + +
      +
      +validate_positions(positions)[source]
      +

      Used to check that the cartesian positions are valid.

      +
      +
      Parameters:
      +

      positions (np.ndarray) – Positions to check .

      +
      +
      Raises:
      +
        +
      • ValueError – If the atomic numbers in the given system are not

      • +
      • included in the species given to this descriptor.

      • +
      +
      +
      +
      + +
      +
      +validate_species(value)[source]
      +

      Used to validate the species information.

      +
      +
      Parameters:
      +

      species (iterable) – Chemical species either as a list of atomic +numbers or list of chemical symbols.

      +
      +
      Returns:
      +

      List of atomic numbers.

      +
      +
      +
      +

      -

      dscribe.descriptors.descriptorglobal module

      +

      dscribe.descriptors.descriptorglobal module

      Copyright 2019 DScribe developers Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -667,21 +788,21 @@

      Submodules
      -class dscribe.descriptors.descriptorglobal.DescriptorGlobal(periodic, sparse, dtype='float64')[source]
      +class dscribe.descriptors.descriptorglobal.DescriptorGlobal(periodic, sparse, dtype='float64')[source]

      Bases: Descriptor

      An abstract base class for all global descriptors.

      Parameters:
        -
      • periodic (bool) – Whether the descriptor should take PBC into account.

      • -
      • sparse (bool) – Whether the output should use a sparse format.

      • -
      • dtype (str) – The output data type.

      • +
      • periodic (bool) – Whether the descriptor should take PBC into account.

      • +
      • sparse (bool) – Whether the output should use a sparse format.

      • +
      • dtype (str) – The output data type.

      -derivatives(system, include=None, exclude=None, method='auto', return_descriptor=True, n_jobs=1, only_physical_cores=False, verbose=False)[source]
      +derivatives(system, include=None, exclude=None, method='auto', return_descriptor=True, n_jobs=1, only_physical_cores=False, verbose=False)[source]

      Return the descriptor derivatives for the given system(s). :param system: One or

      @@ -690,33 +811,33 @@

      Submodules
      Parameters:
        -
      • include (list) – Indices of atoms to compute the derivatives on. +

      • include (list) – Indices of atoms to compute the derivatives on. When calculating descriptor for multiple systems, provide either a one-dimensional list that if applied to all systems or a two-dimensional list of indices. Cannot be provided together with ‘exclude’.

      • -
      • exclude (list) – Indices of atoms not to compute the derivatives on. +

      • exclude (list) – Indices of atoms not to compute the derivatives on. When calculating descriptor for multiple systems, provide either a one-dimensional list that if applied to all systems or a two-dimensional list of indices. Cannot be provided together with ‘include’.

      • -
      • method (str) – The method for calculating the derivatives. Supports +

      • method (str) – The method for calculating the derivatives. Supports ‘numerical’ and ‘auto’. Defaults to using ‘auto’ which corresponds to the the most efficient available method.

      • -
      • return_descriptor (bool) – Whether to also calculate the descriptor +

      • return_descriptor (bool) – Whether to also calculate the descriptor in the same function call. Notice that it typically is faster to calculate both in one go.

      • -
      • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

      • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the number of jobs will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

      • -
      • only_physical_cores (bool) – If a negative n_jobs is given, +

      • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

      • -
      • verbose (bool) – Controls whether to print the progress of each job +

      • verbose (bool) – Controls whether to print the progress of each job into to the console.

      @@ -741,7 +862,7 @@

      Submodules
      -derivatives_numerical(d, c, system, indices, return_descriptor=True)[source]
      +derivatives_numerical(d, c, system, indices, return_descriptor=True)[source]

      Return the numerical derivatives for the given system. This is the default numerical implementation using python. You should overwrite this with a more optimized method whenever possible.

      @@ -751,9 +872,9 @@

      Submodulesase.Atoms) – Atomic structure.

      -
    • indices (list) – Indices of atoms for which the derivatives will be +

    • indices (list) – Indices of atoms for which the derivatives will be computed for.

    • -
    • return_descriptor (bool) – Whether to also calculate the descriptor +

    • return_descriptor (bool) – Whether to also calculate the descriptor in the same function call. This is true by default as it typically is faster to calculate both in one go.

    @@ -763,7 +884,7 @@

    Submodules
    -derivatives_single(system, indices, method='numerical', return_descriptor=True)[source]
    +derivatives_single(system, indices, method='numerical', return_descriptor=True)[source]

    Return the derivatives for the given system. :param system: Atomic structure. :type system: ase.Atoms @@ -774,9 +895,9 @@

    Submodules
    Parameters:
      -
    • method (str) – The method for calculating the derivatives. Supports +

    • method (str) – The method for calculating the derivatives. Supports ‘numerical’.

    • -
    • return_descriptor (bool) – Whether to also calculate the descriptor +

    • return_descriptor (bool) – Whether to also calculate the descriptor in the same function call. This is true by default as it typically is faster to calculate both in one go.

    @@ -798,7 +919,7 @@

    Submodules -

    dscribe.descriptors.descriptorlocal module

    +

    dscribe.descriptors.descriptorlocal module

    Copyright 2019 DScribe developers Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -813,68 +934,68 @@

    Submodules
    -class dscribe.descriptors.descriptorlocal.DescriptorLocal(periodic, sparse, dtype='float64', average='off')[source]
    +class dscribe.descriptors.descriptorlocal.DescriptorLocal(periodic, sparse, dtype='float64', average='off')[source]

    Bases: Descriptor

    An abstract base class for all local descriptors.

    Parameters:
      -
    • periodic (bool) – Whether the descriptor should take PBC into account.

    • -
    • sparse (bool) – Whether the output should use a sparse format.

    • -
    • dtype (str) – The output data type.

    • +
    • periodic (bool) – Whether the descriptor should take PBC into account.

    • +
    • sparse (bool) – Whether the output should use a sparse format.

    • +
    • dtype (str) – The output data type.

    -derivatives(system, centers=None, include=None, exclude=None, method='auto', return_descriptor=True, attach=False, n_jobs=1, only_physical_cores=False, verbose=False)[source]
    +derivatives(system, centers=None, include=None, exclude=None, method='auto', return_descriptor=True, attach=False, n_jobs=1, only_physical_cores=False, verbose=False)[source]

    Return the descriptor derivatives for the given systems and given centers.

    Parameters:
    • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

    • -
    • centers (list) – Centers where to calculate the descriptor. Can be +

    • centers (list) – Centers where to calculate the descriptor. Can be provided as cartesian positions or atomic indices. Also see the “attach”-argument that controls the interperation of centers given as atomic indices. If no centers are defined, the descriptor output will be created for all atoms in the system. When calculating descriptor for multiple systems, provide the centers as a list for each system.

    • -
    • include (list) – Indices of atoms to compute the derivatives on. +

    • include (list) – Indices of atoms to compute the derivatives on. When calculating descriptor for multiple systems, provide either a one-dimensional list that if applied to all systems or a two-dimensional list of indices. Cannot be provided together with ‘exclude’.

    • -
    • exclude (list) – Indices of atoms not to compute the derivatives on. +

    • exclude (list) – Indices of atoms not to compute the derivatives on. When calculating descriptor for multiple systems, provide either a one-dimensional list that if applied to all systems or a two-dimensional list of indices. Cannot be provided together with ‘include’.

    • -
    • method (str) – The method for calculating the derivatives. Provide +

    • method (str) – The method for calculating the derivatives. Provide either ‘numerical’, ‘analytical’ or ‘auto’. If using ‘auto’, the most efficient available method is automatically chosen.

    • -
    • attach (bool) – Controls the behaviour of centers defined as +

    • attach (bool) – Controls the behaviour of centers defined as atomic indices. If True, the centers tied to an atomic index will move together with the atoms with respect to which the derivatives are calculated against. If False, centers defined as atomic indices will be converted into cartesian locations that are completely independent of the atom location during derivative calculation.

    • -
    • return_descriptor (bool) – Whether to also calculate the descriptor +

    • return_descriptor (bool) – Whether to also calculate the descriptor in the same function call. Notice that it typically is faster to calculate both in one go.

    • -
    • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

    • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the number of jobs will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

    • -
    • only_physical_cores (bool) – If a negative n_jobs is given, +

    • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

    • -
    • verbose (bool) – Controls whether to print the progress of each job +

    • verbose (bool) – Controls whether to print the progress of each job into to the console.

    @@ -902,7 +1023,7 @@

    Submodules
    -derivatives_numerical(d, c, system, centers, indices, attach=False, return_descriptor=True)[source]
    +derivatives_numerical(d, c, system, centers, indices, attach=False, return_descriptor=True)[source]

    Return the numerical derivatives for the given system. This is the default numerical implementation with python. You should overwrite this with a more optimized method whenever possible.

    @@ -912,21 +1033,21 @@

    Submodulesase.Atoms) – Atomic structure.

  • -
  • centers (list) – Centers where to calculate SOAP. Can be +

  • centers (list) – Centers where to calculate SOAP. Can be provided as cartesian positions or atomic indices. If no centers are defined, the SOAP output will be created for all atoms in the system. When calculating SOAP for multiple systems, provide the centers as a list for each system.

  • -
  • indices (list) – Indices of atoms for which the derivatives will be +

  • indices (list) – Indices of atoms for which the derivatives will be computed for.

  • -
  • attach (bool) – Controls the behaviour of centers defined as +

  • attach (bool) – Controls the behaviour of centers defined as atomic indices. If True, the centers tied to an atomic index will move together with the atoms with respect to which the derivatives are calculated against. If False, centers defined as atomic indices will be converted into cartesian locations that are completely independent of the atom location during derivative calculation.

  • -
  • return_descriptor (bool) – Whether to also calculate the descriptor +

  • return_descriptor (bool) – Whether to also calculate the descriptor in the same function call. This is true by default as it typically is faster to calculate both in one go.

  • @@ -936,7 +1057,7 @@

    Submodules
    -derivatives_single(system, centers, indices, method='numerical', attach=False, return_descriptor=True)[source]
    +derivatives_single(system, centers, indices, method='numerical', attach=False, return_descriptor=True)[source]

    Return the derivatives for the given system. :param system: Atomic structure. :type system: ase.Atoms @@ -950,18 +1071,18 @@

    Submodules
    Parameters:
      -
    • indices (list) – Indices of atoms for which the derivatives will be +

    • indices (list) – Indices of atoms for which the derivatives will be computed for.

    • -
    • method (str) – The method for calculating the derivatives. Supports +

    • method (str) – The method for calculating the derivatives. Supports ‘numerical’.

    • -
    • attach (bool) – Controls the behaviour of centers defined as +

    • attach (bool) – Controls the behaviour of centers defined as atomic indices. If True, the centers tied to an atomic index will move together with the atoms with respect to which the derivatives are calculated against. If False, centers defined as atomic indices will be converted into cartesian locations that are completely independent of the atom location during derivative calculation.

    • -
    • return_descriptor (bool) – Whether to also calculate the descriptor +

    • return_descriptor (bool) – Whether to also calculate the descriptor in the same function call. This is true by default as it typically is faster to calculate both in one go.

    @@ -983,19 +1104,19 @@

    Submodules
    -init_derivatives_array(n_centers, n_indices)[source]
    +init_derivatives_array(n_centers, n_indices)[source]

    Return a zero-initialized numpy array for the derivatives.

    -init_descriptor_array(n_centers)[source]
    +init_descriptor_array(n_centers)[source]

    Return a zero-initialized numpy array for the descriptor.

    -validate_derivatives_method(method, attach)[source]
    +validate_derivatives_method(method, attach)[source]

    Used to validate and determine the final method for calculating the derivatives.

    @@ -1004,7 +1125,7 @@

    Submodules -

    dscribe.descriptors.descriptormatrix module

    +

    dscribe.descriptors.descriptormatrix module

    Copyright 2019 DScribe developers

    Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -1019,13 +1140,13 @@

    Submodules
    -class dscribe.descriptors.descriptormatrix.DescriptorMatrix(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False, dtype='float64')[source]
    +class dscribe.descriptors.descriptormatrix.DescriptorMatrix(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False, dtype='float64')[source]

    Bases: DescriptorGlobal

    A common base class for two-body matrix-like descriptors.

    Parameters:
      -
    • n_atoms_max (int) – The maximum nuber of atoms that any of the +

    • n_atoms_max (int) – The maximum nuber of atoms that any of the samples can have. This controls how much zeros need to be padded to the final result.

    • permutation (string) –

      Defines the method for handling permutational @@ -1044,21 +1165,21 @@

      Submodulesfloat) – Provide only when using the random-permutation +
    • sigma (float) – Provide only when using the random-permutation option. Standard deviation of the gaussian distributed noise determining how much the rows and columns of the randomly sorted matrix are scrambled.

    • -
    • seed (int) – Provide only when using the random-permutation +

    • seed (int) – Provide only when using the random-permutation option. A seed to use for drawing samples from a normal distribution.

    • -
    • sparse (bool) – Whether the output should be a sparse matrix or a +

    • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

    -create_single(system)[source]
    +create_single(system)[source]
    Parameters:

    system (ase.Atoms | System) – Input system.

    @@ -1074,7 +1195,7 @@

    Submodules
    -get_eigenspectrum(matrix)[source]
    +get_eigenspectrum(matrix)[source]

    Calculates the eigenvalues of the matrix and returns a list of them sorted by their descending absolute value.

    @@ -1092,7 +1213,7 @@

    Submodules
    -get_matrix(system)[source]
    +get_matrix(system)[source]

    Used to get the final matrix for this descriptor.

    Parameters:
    @@ -1109,7 +1230,7 @@

    Submodules
    -get_number_of_features()[source]
    +get_number_of_features()[source]

    Used to inquire the final number of features that this descriptor will have.

    @@ -1117,14 +1238,14 @@

    Submodules

    Number of features for this descriptor.

    Return type:
    -

    int

    +

    int

    -sort(matrix)[source]
    +sort(matrix)[source]

    Sorts the given matrix by using the L2 norm.

    Parameters:
    @@ -1141,7 +1262,7 @@

    Submodules
    -sort_randomly(matrix, sigma)[source]
    +sort_randomly(matrix, sigma)[source]

    Given a coulomb matrix, it adds random noise to the sorting defined by sigma. For sorting, L2-norm is used.

    @@ -1169,14 +1290,14 @@

    Submodules
    -unflatten(features, n_systems=None)[source]
    +unflatten(features, n_systems=None)[source]

    Can be used to “unflatten” a matrix descriptor back into a 2D array. Useful for testing and visualization purposes.

    Parameters:
    • features (np.ndarray) – Flattened features.

    • -
    • n_systems (int) – Number of systems. If not specified a value will be +

    • n_systems (int) – Number of systems. If not specified a value will be guessed from the input features.

    @@ -1191,7 +1312,7 @@

    Submodules
    -zero_pad(array)[source]
    +zero_pad(array)[source]

    Zero-pads the given matrix.

    Parameters:
    @@ -1210,7 +1331,7 @@

    Submodules -

    dscribe.descriptors.ewaldsummatrix module

    +

    dscribe.descriptors.ewaldsummatrix module

    Copyright 2019 DScribe developers

    Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -1225,7 +1346,7 @@

    Submodules
    -class dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False, dtype='float64')[source]
    +class dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False, dtype='float64')[source]

    Bases: DescriptorMatrix

    Calculates an Ewald sum matrix for the a given system.

    Each entry M_ij of the Ewald sum matrix will contain the Coulomb energy @@ -1259,7 +1380,7 @@

    Submodules
    Parameters:
      -
    • n_atoms_max (int) – The maximum nuber of atoms that any of the +

    • n_atoms_max (int) – The maximum nuber of atoms that any of the samples can have. This controls how much zeros need to be padded to the final result.

    • permutation (string) –

      Defines the method for handling permutational @@ -1278,60 +1399,60 @@

      Submodulesfloat) – Provide only when using the random-permutation +
    • sigma (float) – Provide only when using the random-permutation option. Standard deviation of the gaussian distributed noise determining how much the rows and columns of the randomly sorted matrix are scrambled.

    • -
    • seed (int) – Provide only when using the random-permutation +

    • seed (int) – Provide only when using the random-permutation option. A seed to use for drawing samples from a normal distribution.

    • -
    • sparse (bool) – Whether the output should be a sparse matrix or a +

    • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

    -create(system, accuracy=1e-05, w=1, r_cut=None, g_cut=None, a=None, n_jobs=1, only_physical_cores=False, verbose=False)[source]
    +create(system, accuracy=1e-05, w=1, r_cut=None, g_cut=None, a=None, n_jobs=1, only_physical_cores=False, verbose=False)[source]

    Return the Ewald sum matrix for the given systems.

    Parameters:
    • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

    • -
    • accuracy (float) – The accuracy to which the sum is converged to. +

    • accuracy (float) – The accuracy to which the sum is converged to. Corresponds to the variable \(A\) in https://doi.org/10.1080/08927022.2013.840898. Used only if g_cut, r_cut and a have not been specified. Provide either one value or a list of values for each system.

    • -
    • w (float) – Weight parameter that represents the relative +

    • w (float) – Weight parameter that represents the relative computational expense of calculating a term in real and reciprocal space. This has little effect on the total energy, but may influence speed of computation in large systems. Note that this parameter is used only when the cutoffs and a are set to None. Provide either one value or a list of values for each system.

    • -
    • r_cut (float) – Real space cutoff radius dictating how many terms are +

    • r_cut (float) – Real space cutoff radius dictating how many terms are used in the real space sum. Provide either one value or a list of values for each system.

    • -
    • g_cut (float) – Reciprocal space cutoff radius. Provide either one +

    • g_cut (float) – Reciprocal space cutoff radius. Provide either one value or a list of values for each system.

    • -
    • a (float) – The screening parameter that controls the width of the +

    • a (float) – The screening parameter that controls the width of the Gaussians. If not provided, a default value of \(\alpha = \sqrt{\pi}\left(\frac{N}{V^2}\right)^{1/6}\) is used. Corresponds to the standard deviation of the Gaussians. Provide either one value or a list of values for each system.

    • -
    • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

    • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

    • -
    • only_physical_cores (bool) – If a negative n_jobs is given, +

    • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

    • -
    • verbose (bool) – Controls whether to print the progress of each job +

    • verbose (bool) – Controls whether to print the progress of each job into to the console.

    @@ -1348,25 +1469,25 @@

    Submodules
    -create_single(system, accuracy=1e-05, w=1, r_cut=None, g_cut=None, a=None)[source]
    +create_single(system, accuracy=1e-05, w=1, r_cut=None, g_cut=None, a=None)[source]
    Parameters:
    • system (ase.Atoms | System) – Input system.

    • -
    • accuracy (float) – The accuracy to which the sum is converged to. +

    • accuracy (float) – The accuracy to which the sum is converged to. Corresponds to the variable \(A\) in https://doi.org/10.1080/08927022.2013.840898. Used only if g_cut, r_cut and a have not been specified.

    • -
    • w (float) – Weight parameter that represents the relative +

    • w (float) – Weight parameter that represents the relative computational expense of calculating a term in real and reciprocal space. This has little effect on the total energy, but may influence speed of computation in large systems. Note that this parameter is used only when the cutoffs and a are set to None.

    • -
    • r_cut (float) – Real space cutoff radius dictating how +

    • r_cut (float) – Real space cutoff radius dictating how many terms are used in the real space sum.

    • -
    • g_cut (float) – Reciprocal space cutoff radius.

    • -
    • a (float) – The screening parameter that controls the width of the +

    • g_cut (float) – Reciprocal space cutoff radius.

    • +
    • a (float) – The screening parameter that controls the width of the Gaussians. If not provided, a default value of \(\alpha = \sqrt{\pi}\left(\frac{N}{V^2}\right)^{1/6}\) is used. Corresponds to the standard deviation of the Gaussians.

    • @@ -1377,7 +1498,7 @@

      Submodules
      -get_matrix(system)[source]
      +get_matrix(system)[source]

      The total energy matrix. Each matrix element (i, j) corresponds to the total interaction energy in a system with atoms i and j.

      @@ -1397,7 +1518,7 @@

      Submodules -

      dscribe.descriptors.lmbtr module

      +

      dscribe.descriptors.lmbtr module

      Copyright 2019 DScribe developers

      Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -1412,7 +1533,7 @@

      Submodules
      -class dscribe.descriptors.lmbtr.LMBTR(geometry=None, grid=None, weighting=None, normalize_gaussians=True, normalization='none', species=None, periodic=False, sparse=False, dtype='float64')[source]
      +class dscribe.descriptors.lmbtr.LMBTR(geometry=None, grid=None, weighting=None, normalize_gaussians=True, normalization='none', species=None, periodic=False, sparse=False, dtype='float64')[source]

      Bases: DescriptorLocal

      Implementation of the Local Many-body tensor representation.

      You can use this descriptor for finite and periodic systems. When dealing @@ -1430,7 +1551,7 @@

      Submodules
      Parameters:
        -
      • geometry (dict) –

        Setup the geometry function. +

      • geometry (dict) –

        Setup the geometry function. For example:

        "geometry": {"function": "distance"}
         
        @@ -1459,7 +1580,7 @@

        Submodulesdict) –

        Setup the discretization grid. +

      • grid (dict) –

        Setup the discretization grid. For example:

        "grid": {"min": 0.1, "max": 2, "sigma": 0.1, "n": 50}
         
        @@ -1469,7 +1590,7 @@

        Submodulesdict) –

        Setup the weighting function and its parameters. +

      • weighting (dict) –

        Setup the weighting function and its parameters. For example:

        "weighting" : {"function": "exp", "r_cut": 10, "threshold": 1e-3}
         
        @@ -1519,11 +1640,11 @@

        Submodules\(y\). If a value for it is not provided, it defaults to 2.

      • -
      • normalize_gaussians (bool) – Determines whether the gaussians are +

      • normalize_gaussians (bool) – Determines whether the gaussians are normalized to an area of 1. Defaults to True. If False, the normalization factor is dropped and the gaussians have the form. \(e^{-(x-\mu)^2/2\sigma^2}\)

      • -
      • normalization (str) –

        Determines the method for normalizing the +

      • normalization (str) –

        Determines the method for normalizing the output. The available options are:

        • "none": No normalization.

        • @@ -1537,12 +1658,12 @@

          Submodulesbool) – Set to true if you want the descriptor output to +
        • periodic (bool) – Set to true if you want the descriptor output to respect the periodicity of the atomic systems (see the pbc-parameter in the constructor of ase.Atoms).

        • -
        • sparse (bool) – Whether the output should be a sparse matrix or a +

        • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

        • -
        • dtype (str) –

          The data type of the output. Valid options are:

          +
        • dtype (str) –

          The data type of the output. Valid options are:

          • "float32": Single precision floating point numbers.

          • "float64": Double precision floating point numbers.

          • @@ -1553,29 +1674,29 @@

            Submodules
            -create(system, centers=None, n_jobs=1, only_physical_cores=False, verbose=False)[source]
            +create(system, centers=None, n_jobs=1, only_physical_cores=False, verbose=False)[source]

            Return the LMBTR output for the given systems and given centers.

            Parameters:
            • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

            • -
            • centers (list) – Centers where to calculate LMBTR. Can be +

            • centers (list) – Centers where to calculate LMBTR. Can be provided as cartesian positions or atomic indices. If no centers are defined, the LMBTR output will be created for all atoms in the system. When calculating LMBTR for multiple systems, provide the centers as a list for each system.

            • -
            • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

            • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

            • -
            • only_physical_cores (bool) – If a negative n_jobs is given, +

            • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

            • -
            • verbose (bool) – Controls whether to print the progress of each job +

            • verbose (bool) – Controls whether to print the progress of each job into to the console.

            @@ -1594,7 +1715,7 @@

            Submodules
            -create_single(system, centers=None)[source]
            +create_single(system, centers=None)[source]

            Return the local many-body tensor representation for the given system and centers.

            @@ -1622,21 +1743,21 @@

            Submodules
            -property geometry
            +property geometry

            -get_location(species)[source]
            +get_location(species)[source]

            Can be used to query the location of a species combination in the the flattened output.

            Parameters:
              -
            • species (tuple) – A tuple containing a species combination as

            • -
            • as (chemical symbols or atomic numbers. The central atom is marked) –

            • -
            • example (species "X". The tuple can be for) –

            • -
            • "H")

            • +
            • species (tuple) – A tuple containing a species combination as

            • +
            • as (chemical symbols or atomic numbers. The central atom is marked)

            • +
            • example (species "X". The tuple can be for)

            • +
            • "H")

            Returns:
            @@ -1645,11 +1766,11 @@

            SubmodulesReturn type: -

            slice

            +

            slice

            Raises:
              -
            • ValueError – If the requested species combination is not in the

            • +
            • ValueError – If the requested species combination is not in the

            • output or if invalid species defined.

            @@ -1658,7 +1779,7 @@

            Submodules
            -get_number_of_features()[source]
            +get_number_of_features()[source]

            Used to inquire the final number of features that this descriptor will have.

            The number of features for the LMBTR is calculated as follows:

            @@ -1680,36 +1801,36 @@

            Submodules

            Number of features for this descriptor.

            Return type:
            -

            int

            +

            int

            -property grid
            +property grid
            -property normalization
            +property normalization
            -property species
            +property species
            -property weighting
            +property weighting

    -

    dscribe.descriptors.mbtr module

    +

    dscribe.descriptors.mbtr module

    Copyright 2019 DScribe developers

    Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -1724,7 +1845,7 @@

    Submodules
    -class dscribe.descriptors.mbtr.MBTR(geometry=None, grid=None, weighting=None, normalize_gaussians=True, normalization='none', species=None, periodic=False, sparse=False, dtype='float64')[source]
    +class dscribe.descriptors.mbtr.MBTR(geometry=None, grid=None, weighting=None, normalize_gaussians=True, normalization='none', species=None, periodic=False, sparse=False, dtype='float64')[source]

    Bases: DescriptorGlobal

    Implementation of the Many-body tensor representation.

    You can use this descriptor for finite and periodic systems. When dealing @@ -1735,7 +1856,7 @@

    Submodules
    Parameters:
      -
    • geometry (dict) –

      Setup the geometry function. +

    • geometry (dict) –

      Setup the geometry function. For example:

      "geometry": {"function": "atomic_number"}
       
      @@ -1771,7 +1892,7 @@

      Submodulesdict) –

      Setup the discretization grid. +

    • grid (dict) –

      Setup the discretization grid. For example:

      "grid": {"min": 0.1, "max": 2, "sigma": 0.1, "n": 50}
       
      @@ -1781,7 +1902,7 @@

      Submodulesdict) –

      Setup the weighting function and its parameters. +

    • weighting (dict) –

      Setup the weighting function and its parameters. For example:

      "weighting" : {"function": "exp", "r_cut": 10, "threshold": 1e-3}
       
      @@ -1838,11 +1959,11 @@

      Submodules\(y\). If a value for it is not provided, it defaults to 2.

    • -
    • normalize_gaussians (bool) – Determines whether the gaussians are +

    • normalize_gaussians (bool) – Determines whether the gaussians are normalized to an area of 1. Defaults to True. If False, the normalization factor is dropped and the gaussians have the form. \(e^{-(x-\mu)^2/2\sigma^2}\)

    • -
    • normalization (str) –

      Determines the method for normalizing the +

    • normalization (str) –

      Determines the method for normalizing the output. The available options are:

      • "none": No normalization.

      • @@ -1861,12 +1982,12 @@

        Submodulesbool) – Set to true if you want the descriptor output to +
      • periodic (bool) – Set to true if you want the descriptor output to respect the periodicity of the atomic systems (see the pbc-parameter in the constructor of ase.Atoms).

      • -
      • sparse (bool) – Whether the output should be a sparse matrix or a +

      • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

      • -
      • dtype (str) –

        The data type of the output. Valid options are:

        +
      • dtype (str) –

        The data type of the output. Valid options are:

        • "float32": Single precision floating point numbers.

        • "float64": Double precision floating point numbers.

        • @@ -1877,23 +1998,23 @@

          Submodules
          -create(system, n_jobs=1, only_physical_cores=False, verbose=False)[source]
          +create(system, n_jobs=1, only_physical_cores=False, verbose=False)[source]

          Return MBTR output for the given systems.

          Parameters:
          • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

          • -
          • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

          • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

          • -
          • only_physical_cores (bool) – If a negative n_jobs is given, +

          • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

          • -
          • verbose (bool) – Controls whether to print the progress of each job +

          • verbose (bool) – Controls whether to print the progress of each job into to the console.

          @@ -1909,7 +2030,7 @@

          Submodules
          -create_single(system)[source]
          +create_single(system)[source]

          Return the many-body tensor representation for the given system.

          Parameters:
          @@ -1927,22 +2048,22 @@

          Submodules
          -derivatives_analytical(d, c, system, indices, return_descriptor)[source]
          +derivatives_analytical(d, c, system, indices, return_descriptor)[source]

          -property geometry
          +property geometry
          -get_location(species)[source]
          +get_location(species)[source]

          Can be used to query the location of a species combination in the the output.

          Parameters:
          -

          species (tuple) – A tuple containing a species combination as +

          species (tuple) – A tuple containing a species combination as chemical symbols or atomic numbers. The tuple can be for example (“H”), (“H”, “O”) or (“H”, “O”, “H”).

          @@ -1955,10 +2076,10 @@

          SubmodulesReturn type: -

          slice

          +

          slice

          Raises:
          -

          ValueError – If the requested species combination is not in the +

          ValueError – If the requested species combination is not in the output or if invalid species defined.

          @@ -1966,7 +2087,7 @@

          Submodules
          -get_number_of_features()[source]
          +get_number_of_features()[source]

          Used to inquire the final number of features that this descriptor will have.

          @@ -1974,43 +2095,43 @@

          Submodules

          Number of features for this descriptor.

          Return type:
          -

          int

          +

          int

          -property grid
          +property grid
          -property normalization
          +property normalization
          -property species
          +property species
          -validate_derivatives_method(method)[source]
          +validate_derivatives_method(method)[source]

          Used to validate and determine the final method for calculating the derivatives.

          -property weighting
          +property weighting
          -dscribe.descriptors.mbtr.check_geometry(geometry: dict)[source]
          +dscribe.descriptors.mbtr.check_geometry(geometry: dict)[source]

          Used to ensure that the given geometry settings are valid.

          Parameters:
          @@ -2021,18 +2142,18 @@

          Submodules
          -dscribe.descriptors.mbtr.check_grid(grid: dict)[source]
          +dscribe.descriptors.mbtr.check_grid(grid: dict)[source]

          Used to ensure that the given grid settings are valid.

          Parameters:
          -

          grid (dict) – Dictionary containing the grid setup.

          +

          grid (dict) – Dictionary containing the grid setup.

          -dscribe.descriptors.mbtr.check_weighting(k: int, weighting: dict, periodic: bool)[source]
          +dscribe.descriptors.mbtr.check_weighting(k: int, weighting: dict, periodic: bool)[source]

          Used to ensure that the given weighting settings are valid.

          Parameters:
          @@ -2047,7 +2168,7 @@

          Submodules -

          dscribe.descriptors.sinematrix module

          +

          dscribe.descriptors.sinematrix module

          Copyright 2019 DScribe developers

          Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -2062,7 +2183,7 @@

          Submodules
          -class dscribe.descriptors.sinematrix.SineMatrix(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False, dtype='float64')[source]
          +class dscribe.descriptors.sinematrix.SineMatrix(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False, dtype='float64')[source]

          Bases: DescriptorMatrix

          Calculates the zero padded Sine matrix for different systems.

          The Sine matrix is defined as:

          @@ -2089,7 +2210,7 @@

          Submodules
          Parameters:
            -
          • n_atoms_max (int) – The maximum nuber of atoms that any of the +

          • n_atoms_max (int) – The maximum nuber of atoms that any of the samples can have. This controls how much zeros need to be padded to the final result.

          • permutation (string) –

            Defines the method for handling permutational @@ -2108,38 +2229,38 @@

            Submodulesfloat) – Provide only when using the random-permutation +
          • sigma (float) – Provide only when using the random-permutation option. Standard deviation of the gaussian distributed noise determining how much the rows and columns of the randomly sorted matrix are scrambled.

          • -
          • seed (int) – Provide only when using the random-permutation +

          • seed (int) – Provide only when using the random-permutation option. A seed to use for drawing samples from a normal distribution.

          • -
          • sparse (bool) – Whether the output should be a sparse matrix or a +

          • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

          -create(system, n_jobs=1, only_physical_cores=False, verbose=False)[source]
          +create(system, n_jobs=1, only_physical_cores=False, verbose=False)[source]

          Return the Sine matrix for the given systems.

          Parameters:
          • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

          • -
          • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

          • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

          • -
          • only_physical_cores (bool) – If a negative n_jobs is given, +

          • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

          • -
          • verbose (bool) – Controls whether to print the progress of each job +

          • verbose (bool) – Controls whether to print the progress of each job into to the console.

          @@ -2156,7 +2277,7 @@

          Submodules
          -get_matrix(system)[source]
          +get_matrix(system)[source]

          Creates the Sine matrix for the given system.

          Parameters:
          @@ -2175,7 +2296,7 @@

          Submodules -

          dscribe.descriptors.soap module

          +

          dscribe.descriptors.soap module

          Copyright 2019 DScribe developers

          Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -2190,7 +2311,7 @@

          Submodules
          -class dscribe.descriptors.soap.SOAP(r_cut=None, n_max=None, l_max=None, sigma=1.0, rbf='gto', weighting=None, average='off', compression={'mode': 'off', 'species_weighting': None}, species=None, periodic=False, sparse=False, dtype='float64')[source]
          +class dscribe.descriptors.soap.SOAP(r_cut=None, n_max=None, l_max=None, sigma=1.0, rbf='gto', weighting=None, average='off', compression={'mode': 'off', 'species_weighting': None}, species=None, periodic=False, sparse=False, dtype='float64')[source]

          Bases: DescriptorLocal

          Class for generating a partial power spectrum from Smooth Overlap of Atomic Orbitals (SOAP). This implementation uses real (tesseral) spherical @@ -2211,19 +2332,19 @@

          Submodules
          Parameters:
            -
          • r_cut (float) – A cutoff for local region in angstroms. Should be +

          • r_cut (float) – A cutoff for local region in angstroms. Should be bigger than 1 angstrom for the gto-basis.

          • -
          • n_max (int) – The number of radial basis functions.

          • -
          • l_max (int) – The maximum degree of spherical harmonics.

          • -
          • sigma (float) – The standard deviation of the gaussians used to expand the +

          • n_max (int) – The number of radial basis functions.

          • +
          • l_max (int) – The maximum degree of spherical harmonics.

          • +
          • sigma (float) – The standard deviation of the gaussians used to expand the atomic density.

          • -
          • rbf (str) –

            The radial basis functions to use. The available options are:

            +
          • rbf (str) –

            The radial basis functions to use. The available options are:

            • "gto": Spherical gaussian type orbitals defined as \(g_{nl}(r) = \sum_{n'=1}^{n_\mathrm{max}}\,\beta_{nn'l} r^l e^{-\alpha_{n'l}r^2}\)

            • "polynomial": Polynomial basis defined as \(g_{n}(r) = \sum_{n'=1}^{n_\mathrm{max}}\,\beta_{nn'} (r-r_\mathrm{cut})^{n'+2}\)

          • -
          • weighting (dict) –

            Contains the options which control the +

          • weighting (dict) –

            Contains the options which control the weighting of the atomic density. Leave unspecified if you do not wish to apply any weighting. The dictionary may contain the following entries:

            @@ -2282,7 +2403,7 @@

            Submodulesstr) –

            The averaging mode over the centers of interest. +

          • average (str) –

            The averaging mode over the centers of interest. Valid options are:

              @@ -2292,7 +2413,7 @@

              Submodulesdict) –

              Contains the options which specify the feature compression to apply. +

            • compression (dict) –

              Contains the options which specify the feature compression to apply. Applying compression can slightly reduce the accuracy of models trained on the feature representation but can also dramatically reduce the size of the feature vector and hence the computational cost. Options are:

              @@ -2336,12 +2457,12 @@

              Submodulesbool) – Set to True if you want the descriptor output to +
            • periodic (bool) – Set to True if you want the descriptor output to respect the periodicity of the atomic systems (see the pbc-parameter in the constructor of ase.Atoms).

            • -
            • sparse (bool) – Whether the output should be a sparse matrix or a +

            • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

            • -
            • dtype (str) –

              The data type of the output. Valid options are:

              +
            • dtype (str) –

              The data type of the output. Valid options are:

              • "float32": Single precision floating point numbers.

              • "float64": Double precision floating point numbers.

              • @@ -2352,34 +2473,34 @@

                Submodules
                -property compression
                +property compression

          -create(system, centers=None, n_jobs=1, only_physical_cores=False, verbose=False)[source]
          +create(system, centers=None, n_jobs=1, only_physical_cores=False, verbose=False)[source]

          Return the SOAP output for the given systems and given centers.

          Parameters:
          • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

          • -
          • centers (list) – Centers where to calculate SOAP. Can be +

          • centers (list) – Centers where to calculate SOAP. Can be provided as cartesian positions or atomic indices. If no centers are defined, the SOAP output will be created for all atoms in the system. When calculating SOAP for multiple systems, provide the centers as a list for each system.

          • -
          • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

          • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

          • -
          • only_physical_cores (bool) – If a negative n_jobs is given, +

          • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

          • -
          • verbose (bool) – Controls whether to print the progress of each job +

          • verbose (bool) – Controls whether to print the progress of each job into to the console.

          @@ -2400,13 +2521,13 @@

          Submodules
          -create_single(system, centers=None)[source]
          +create_single(system, centers=None)[source]

          Return the SOAP output for the given system and given centers.

          Parameters:
          @@ -169,7 +171,7 @@

          Submodules -

          dscribe.kernels.localsimilaritykernel module

          +

          dscribe.kernels.localsimilaritykernel module

          Copyright 2019 DScribe developers

          Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -184,8 +186,8 @@

          Submodules
          -class dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel(metric, gamma=None, degree=3, coef0=1, kernel_params=None, normalize_kernel=True)[source]
          -

          Bases: ABC

          +class dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel(metric, gamma=None, degree=3, coef0=1, kernel_params=None, normalize_kernel=True)[source] +

          Bases: ABC

          An abstract base class for all kernels that use the similarity of local atomic environments to compute a global similarity measure.

          @@ -197,13 +199,13 @@

          Submodulesfloat) – Gamma parameter for the RBF, laplacian, polynomial, +
        • gamma (float) – Gamma parameter for the RBF, laplacian, polynomial, exponential chi2 and sigmoid kernels. Interpretation of the default value is left to the kernel; see the documentation for sklearn.metrics.pairwise. Ignored by other kernels.

        • -
        • degree (float) – Degree of the polynomial kernel. Ignored by other +

        • degree (float) – Degree of the polynomial kernel. Ignored by other kernels.

        • -
        • coef0 (float) – Zero coefficient for polynomial and sigmoid kernels. +

        • coef0 (float) – Zero coefficient for polynomial and sigmoid kernels. Ignored by other kernels.

        • kernel_params (mapping of string to any) – Additional parameters (keyword arguments) for kernel function passed as callable @@ -217,7 +219,7 @@

          Submodules
          -create(x, y=None)[source]
          +create(x, y=None)[source]

          Creates the kernel matrix based on the given lists of local features x and y.

          @@ -240,7 +242,7 @@

          Submodules
          -abstract get_global_similarity(localkernel)[source]
          +abstract get_global_similarity(localkernel)[source]

          Computes the global similarity between two structures A and B.

          Parameters:
          @@ -251,14 +253,14 @@

          Submodules

          Global similarity between the structures A and B.

          Return type:
          -

          float

          +

          float

        • -get_pairwise_matrix(X, Y=None)[source]
          +get_pairwise_matrix(X, Y=None)[source]

          Calculates the pairwise similarity of atomic environments with scikit-learn, and the pairwise metric configured in the constructor.

          @@ -285,7 +287,7 @@

          Submodules -

          dscribe.kernels.rematchkernel module

          +

          dscribe.kernels.rematchkernel module

          Copyright 2019 DScribe developers

          Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -300,7 +302,7 @@

          Submodules
          -class dscribe.kernels.rematchkernel.REMatchKernel(alpha=0.1, threshold=1e-06, metric='linear', gamma=None, degree=3, coef0=1, kernel_params=None, normalize_kernel=True)[source]
          +class dscribe.kernels.rematchkernel.REMatchKernel(alpha=0.1, threshold=1e-06, metric='linear', gamma=None, degree=3, coef0=1, kernel_params=None, normalize_kernel=True)[source]

          Bases: LocalSimilarityKernel

          Used to compute a global similarity of structures based on the regularized-entropy match (REMatch) kernel of local atomic environments in @@ -319,10 +321,10 @@

          Submodules
          Parameters:
            -
          • alpha (float) – Parameter controlling the entropic penalty. Values +

          • alpha (float) – Parameter controlling the entropic penalty. Values close to zero approach the best-match solution and values towards infinity approach the average kernel.

          • -
          • threshold (float) – Convergence threshold used in the +

          • threshold (float) – Convergence threshold used in the Sinkhorn-algorithm.

          • metric (string or callable) – The pairwise metric used for calculating the local similarity. Accepts any of the sklearn @@ -330,13 +332,13 @@

            Submodulesfloat) – Gamma parameter for the RBF, laplacian, polynomial, +
          • gamma (float) – Gamma parameter for the RBF, laplacian, polynomial, exponential chi2 and sigmoid kernels. Interpretation of the default value is left to the kernel; see the documentation for sklearn.metrics.pairwise. Ignored by other kernels.

          • -
          • degree (float) – Degree of the polynomial kernel. Ignored by other +

          • degree (float) – Degree of the polynomial kernel. Ignored by other kernels.

          • -
          • coef0 (float) – Zero coefficient for polynomial and sigmoid kernels. +

          • coef0 (float) – Zero coefficient for polynomial and sigmoid kernels. Ignored by other kernels.

          • kernel_params (mapping of string to any) – Additional parameters (keyword arguments) for kernel function passed as callable @@ -350,7 +352,7 @@

            Submodules
            -get_global_similarity(localkernel)[source]
            +get_global_similarity(localkernel)[source]

            Computes the REMatch similarity between two structures A and B.

            Parameters:
            @@ -361,7 +363,7 @@

            Submodules

            REMatch similarity between the structures A and B.

            Return type:
            -

            float

            +

            float

          @@ -370,7 +372,7 @@

          Submodules -

          Module contents

          +

          Module contents

          Copyright 2019 DScribe developers

          Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. diff --git a/docs/2.1.x/doc/dscribe.utils.html b/docs/2.1.x/doc/dscribe.utils.html index 673d9c3e..a159506e 100644 --- a/docs/2.1.x/doc/dscribe.utils.html +++ b/docs/2.1.x/doc/dscribe.utils.html @@ -1,23 +1,25 @@ - + - + dscribe.utils package — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -87,12 +89,12 @@

          -

          dscribe.utils package

          +

          dscribe.utils package

          -

          Submodules

          +

          Submodules

          -

          dscribe.utils.dimensionality module

          +

          dscribe.utils.dimensionality module

          Copyright 2019 DScribe developers

          Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -107,17 +109,17 @@

          Submodules
          -dscribe.utils.dimensionality.is1d(array, dtype=<class 'numpy.integer'>)[source]
          +dscribe.utils.dimensionality.is1d(array, dtype=<class 'numpy.integer'>)[source]

          -dscribe.utils.dimensionality.is2d(array, dtype=<class 'numpy.integer'>)[source]
          +dscribe.utils.dimensionality.is2d(array, dtype=<class 'numpy.integer'>)[source]

    -

    dscribe.utils.geometry module

    +

    dscribe.utils.geometry module

    Copyright 2019 DScribe developers

    Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -132,7 +134,7 @@

    Submodules
    -dscribe.utils.geometry.get_adjacency_list(adjacency_matrix)[source]
    +dscribe.utils.geometry.get_adjacency_list(adjacency_matrix)[source]

    Used to transform an adjacency matrix into an adjacency list. The adjacency list provides much faster access to the neighbours of a node.

    @@ -146,26 +148,26 @@

    SubmodulesReturn type: -

    list

    +

    list

    -dscribe.utils.geometry.get_adjacency_matrix(radius, pos1, pos2=None, output_type='coo_matrix')[source]
    +dscribe.utils.geometry.get_adjacency_matrix(radius, pos1, pos2=None, output_type='coo_matrix')[source]

    Calculates a sparse adjacency matrix by only considering distances within a certain cutoff. Uses a k-d tree to reach O(n log(N)) time complexity.

    Parameters:
      -
    • radius (float) – The cutoff radius within which distances are +

    • radius (float) – The cutoff radius within which distances are calculated. Distances outside this radius are not included.

    • pos1 (np.ndarray) – A list of N-dimensional positions.

    • pos2 (np.ndarray) – A list of N-dimensional positions. If not provided, is assumed to be the same as pos1.

    • -
    • output_type (str) – Which container to use for output data. Options: +

    • output_type (str) – Which container to use for output data. Options: “dok_matrix”, “coo_matrix”, “dict”, or “ndarray”. Default: “dok_matrix”.

    @@ -175,14 +177,14 @@

    SubmodulesReturn type: -

    dok_matrix | np.array | coo_matrix | dict

    +

    dok_matrix | np.array | coo_matrix | dict

    -dscribe.utils.geometry.get_extended_system(system, radial_cutoff, centers=None, return_cell_indices=False)[source]
    +dscribe.utils.geometry.get_extended_system(system, radial_cutoff, centers=None, return_cell_indices=False)[source]

    Used to create a periodically extended system. If centers are not specified, simply takes returns the original system multiplied by an integer amount of times in each direction to cover the radial cutoff. If @@ -192,7 +194,7 @@

    SubmodulesParameters:

    -

    dscribe.utils.species module

    +

    dscribe.utils.species module

    Copyright 2019 DScribe developers

    Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -231,13 +233,13 @@

    Submodules
    -dscribe.utils.species.get_atomic_numbers(species)[source]
    +dscribe.utils.species.get_atomic_numbers(species)[source]

    Given a list of chemical species either as a atomic numbers or chemical symbols, return the correponding list of ordered atomic numbers with duplicates removed.

    Parameters:
    -

    species (iterable of ints or strings) –

    +

    species (iterable of ints or strings)

    Returns:

    list of atomic numbers as an integer array.

    @@ -250,7 +252,7 @@

    Submodules
    -dscribe.utils.species.symbols_to_numbers(symbols)[source]
    +dscribe.utils.species.symbols_to_numbers(symbols)[source]

    Transforms a set of chemical symbols into the corresponding atomic numbers.

    @@ -268,7 +270,7 @@

    Submodules -

    dscribe.utils.stats module

    +

    dscribe.utils.stats module

    Copyright 2019 DScribe developers

    Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. @@ -283,7 +285,7 @@

    Submodules
    -dscribe.utils.stats.system_stats(system_iterator)[source]
    +dscribe.utils.stats.system_stats(system_iterator)[source]
    Parameters:

    system_stats (iterable containing ASE.Atoms or System) – The atomic @@ -310,7 +312,7 @@

    Submodules -

    Module contents

    +

    Module contents

    Copyright 2019 DScribe developers

    Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. diff --git a/docs/2.1.x/doc/modules.html b/docs/2.1.x/doc/modules.html index 8d550a09..6dc3b703 100644 --- a/docs/2.1.x/doc/modules.html +++ b/docs/2.1.x/doc/modules.html @@ -1,23 +1,26 @@ - + - + dscribe — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + + @@ -83,7 +86,7 @@

    -

    dscribe

    +

    dscribe

    • dscribe package
        @@ -136,10 +139,11 @@

        dscribeACSFWrapper
      • CellList
          diff --git a/docs/2.1.x/genindex.html b/docs/2.1.x/genindex.html index 96f5c74e..14a452bc 100644 --- a/docs/2.1.x/genindex.html +++ b/docs/2.1.x/genindex.html @@ -1,22 +1,24 @@ - + Index — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -157,8 +159,6 @@

          C

        • CellList (class in dscribe.ext)
        • CellListResult (class in dscribe.ext) -
        • -
        • check_atomic_numbers() (dscribe.descriptors.descriptor.Descriptor method)
        • check_geometry() (in module dscribe.descriptors.mbtr)
        • @@ -502,7 +502,11 @@

          G

          • g2_params (dscribe.descriptors.acsf.ACSF property) + +
          • g3_params (dscribe.descriptors.acsf.ACSF property)
          • get_pairwise_matrix() (dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel method) @@ -805,8 +809,6 @@

            S

            - +
            • sort_randomly() (dscribe.descriptors.descriptormatrix.DescriptorMatrix method)
            • sparse (dscribe.descriptors.descriptor.Descriptor property) @@ -872,6 +874,10 @@

              U

              V

              diff --git a/docs/2.1.x/index.html b/docs/2.1.x/index.html index ff2021f7..a99f2734 100644 --- a/docs/2.1.x/index.html +++ b/docs/2.1.x/index.html @@ -1,23 +1,26 @@ - + - + DScribe — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + + @@ -84,23 +87,23 @@
              -

              DScribe

              +

              DScribe

              https://github.com/SINGROUP/dscribe/actions/workflows/actions.yml/badge.svg https://coveralls.io/repos/github/SINGROUP/dscribe/badge.svg?branch=master -https://img.shields.io/badge/code%20style-black-000000.svg +https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json

              DScribe is a Python package for transforming atomic structures into fixed-size numerical fingerprints. These fingerprints are often called “descriptors” and they can be used in various tasks, including machine learning, visualization, similarity analysis, etc. To get started you can check the basic tutorial.

              -

              Capabilities at a Glance

              +

              Capabilities at a Glance

              DScribe currently includes the following descriptors:

              ---+++ @@ -146,7 +149,7 @@

              Capabilities at a Glance -

              Go Deeper

              +

              Go Deeper

              You can find more details in the following articles:

                diff --git a/docs/2.1.x/install.html b/docs/2.1.x/install.html index bcb21a44..d57a3c87 100644 --- a/docs/2.1.x/install.html +++ b/docs/2.1.x/install.html @@ -1,23 +1,25 @@ - + - + Installation — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -91,11 +93,11 @@
                -

                Installation

                +

                Installation

                The newest versions of the package are compatible with Python >= 3.8 (tested on 3.8, 3.9, 3.9, 3.10 and 3.11). DScribe versions <= 0.2.7 also support Python 2.7.

                -

                pip

                +

                pip

                The latest stable release is available through pip:

                pip install dscribe
                 
                @@ -106,7 +108,7 @@

                pip

                -

                conda

                +

                conda

                We also provide a conda package through the conda-forge project. To install the package with conda, use the following command:

                conda install -c conda-forge dscribe
                @@ -114,7 +116,7 @@ 

                conda

                -

                From source

                +

                From source

                To install the latest development version from source, clone the source code from github and install with pip from local file:

                git clone https://github.com/SINGROUP/dscribe.git
                @@ -129,7 +131,7 @@ 

                From source -

                Common issues

                +

                Common issues

                • fatal error: pybind11/pybind11.h: No such file or directory: The package diff --git a/docs/2.1.x/objects.inv b/docs/2.1.x/objects.inv index 0587e35f..78356490 100644 Binary files a/docs/2.1.x/objects.inv and b/docs/2.1.x/objects.inv differ diff --git a/docs/2.1.x/publications.html b/docs/2.1.x/publications.html index 6e58bb39..e736cb54 100644 --- a/docs/2.1.x/publications.html +++ b/docs/2.1.x/publications.html @@ -1,23 +1,25 @@ - + - + Publications — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -89,12 +91,12 @@

                  -

                  Publications

                  +

                  Publications

                  This page provides a list of peer-reviewed articles that have made use of DScribe as a part of the scientific process. The list is non-comprehensive and you can contact us if you think a publication should be included.

                  -

                  2020

                  +

                  2020

                  • Marc Philipp Bahlke, Natnael Mogos, Jonny Proppe, and Carmen Herrmann. Exchange spin coupling from gaussian process regression. The Journal of Physical Chemistry A, 2020. doi:10.1021/acs.jpca.0c05983.

                  • @@ -102,7 +104,7 @@

                    2020<

                  -

                  2019

                  +

                  2019

                  • Annika Stuke, Milica Todorović, Matthias Rupp, Christian Kunkel, Kunal Ghosh, Lauri Himanen, and Patrick Rinke. Chemical diversity in molecular orbital energy predictions with kernel ridge regression. The Journal of Chemical Physics, 150(20):204121, 2019. doi:10.1063/1.5086105.

                  • diff --git a/docs/2.1.x/py-modindex.html b/docs/2.1.x/py-modindex.html index e76e244a..be5bec11 100644 --- a/docs/2.1.x/py-modindex.html +++ b/docs/2.1.x/py-modindex.html @@ -1,22 +1,24 @@ - + Python Module Index — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + diff --git a/docs/2.1.x/search.html b/docs/2.1.x/search.html index def0d575..320df8a4 100644 --- a/docs/2.1.x/search.html +++ b/docs/2.1.x/search.html @@ -1,23 +1,25 @@ - + Search — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + diff --git a/docs/2.1.x/searchindex.js b/docs/2.1.x/searchindex.js index dee933eb..71904a7d 100644 --- a/docs/2.1.x/searchindex.js +++ b/docs/2.1.x/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["about", "api", "changelog", "citing", "contributing", "doc/dscribe", "doc/dscribe.core", "doc/dscribe.descriptors", "doc/dscribe.kernels", "doc/dscribe.utils", "doc/modules", "index", "install", "publications", "tutorials/basics", "tutorials/derivatives", "tutorials/descriptors/acsf", "tutorials/descriptors/coulomb_matrix", "tutorials/descriptors/ewald_sum_matrix", "tutorials/descriptors/lmbtr", "tutorials/descriptors/mbtr", "tutorials/descriptors/sine_matrix", "tutorials/descriptors/soap", "tutorials/descriptors/valleoganov", "tutorials/machine_learning/clustering", "tutorials/machine_learning/forces_and_energies", "tutorials/similarity_analysis/kernels", "tutorials/sparse", "tutorials/tutorials", "tutorials/visualization/coloring_by_environment"], "filenames": ["about.rst", "api.rst", "changelog.rst", "citing.rst", "contributing.rst", "doc/dscribe.rst", "doc/dscribe.core.rst", "doc/dscribe.descriptors.rst", "doc/dscribe.kernels.rst", "doc/dscribe.utils.rst", "doc/modules.rst", "index.rst", "install.rst", "publications.rst", "tutorials/basics.rst", "tutorials/derivatives.rst", "tutorials/descriptors/acsf.rst", "tutorials/descriptors/coulomb_matrix.rst", "tutorials/descriptors/ewald_sum_matrix.rst", "tutorials/descriptors/lmbtr.rst", "tutorials/descriptors/mbtr.rst", "tutorials/descriptors/sine_matrix.rst", "tutorials/descriptors/soap.rst", "tutorials/descriptors/valleoganov.rst", "tutorials/machine_learning/clustering.rst", "tutorials/machine_learning/forces_and_energies.rst", "tutorials/similarity_analysis/kernels.rst", "tutorials/sparse.rst", "tutorials/tutorials.rst", "tutorials/visualization/coloring_by_environment.rst"], "titles": ["About", "API", "Changelog", "Citing DScribe", "Contributing", "dscribe package", "dscribe.core package", "dscribe.descriptors package", "dscribe.kernels package", "dscribe.utils package", "dscribe", "DScribe", "Installation", "Publications", "Basic concepts", "Derivatives", "Atom-centered Symmetry Functions", "Coulomb Matrix", "Ewald sum matrix", "Local Many-body Tensor Representation", "Many-body Tensor Representation", "Sine matrix", "Smooth Overlap of Atomic Positions", "Valle-Oganov descriptor", "Unsupervised Learning: Clustering", "Supervised Learning: Training an ML Force-field", "Building similarity kernels from local environments", "Sparse output", "Tutorials", "Chemical Environment Visualization with Local Descriptors"], "terms": {"thi": [0, 2, 5, 6, 7, 8, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "packag": [0, 1, 10, 11, 12], "i": [0, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "develop": [0, 4, 5, 6, 7, 8, 9, 12, 17], "aalto": 0, "univers": 0, "depart": 0, "appli": [0, 6, 7, 17, 18, 20, 21, 22, 25, 29], "physic": [0, 3, 6, 7, 13, 16, 17, 18, 19, 20, 21, 22, 23], "comput": [0, 3, 7, 8, 14, 15, 18, 19, 20, 21, 22, 23, 25], "electron": 0, "structur": [0, 2, 4, 7, 8, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29], "theori": 0, "cest": 0, "surfac": [0, 19, 24], "interfac": [0, 2, 29], "nanoscal": 0, "sin": [0, 7, 21, 23], "group": [0, 6, 24], "If": [0, 6, 7, 8, 9, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 27, 28], "you": [0, 1, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28], "encount": [0, 7, 16, 19, 20, 22, 23], "issu": [0, 2, 18, 20], "softwar": [0, 5, 6, 7, 8, 9], "pleas": [0, 3, 14], "submit": 0, "them": [0, 6, 7, 14, 24, 25, 26, 27], "directli": [0, 7, 18, 19, 20, 22, 25, 26, 29], "github": [0, 4, 11, 12, 25], "For": [0, 2, 6, 7, 8, 12, 14, 15, 19, 20, 22, 23, 25, 26], "gener": [0, 4, 6, 7, 14, 15, 22, 26, 28, 29], "discuss": [0, 4, 22], "possibl": [0, 2, 6, 7, 15, 16, 17, 19, 20, 22, 23, 27], "improv": [0, 2, 25], "addit": [0, 2, 7, 8, 12, 15, 16, 19, 20, 22, 26, 29], "us": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "forum": 0, "ensur": [0, 4, 7, 17, 22], "all": [0, 2, 4, 6, 7, 8, 14, 15, 16, 17, 19, 20, 22, 23, 24, 25, 27, 29], "ar": [0, 2, 6, 7, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "publicli": 0, "avail": [0, 2, 7, 12, 15, 17, 18, 19, 20, 21, 22, 23], "archiv": 0, "The": [0, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 29], "under": [0, 2, 5, 6, 7, 8, 9, 22, 25], "apach": [0, 5, 6, 7, 8, 9], "version": [0, 2, 3, 5, 6, 7, 8, 9, 12, 22, 27], "2": [0, 2, 3, 5, 6, 7, 8, 9, 12, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29], "0": [0, 2, 3, 5, 6, 7, 8, 9, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "project": [0, 6, 12], "ha": [0, 2, 7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 23], "receiv": 0, "from": [0, 1, 2, 4, 6, 7, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29], "jenni": 0, "antti": 0, "wihuri": 0, "foundat": [0, 23], "european": 0, "union": 0, "": [0, 3, 6, 7, 14, 17, 18, 19, 20, 22, 24, 25, 27], "horizon": 0, "2020": [0, 3, 23], "research": 0, "innov": 0, "programm": 0, "grant": 0, "agreement": 0, "number": [0, 2, 3, 6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26], "676580": 0, "nomad": 0, "686053": 0, "critcat": 0, "here": [1, 7, 11, 15, 20, 21, 23, 24, 25, 26, 29], "can": [1, 2, 4, 6, 7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "find": [1, 6, 11, 12, 14, 24, 25, 28, 29], "more": [1, 2, 7, 8, 11, 12, 14, 17, 19, 22, 25, 26, 29], "detail": [1, 2, 7, 11, 14, 22], "document": [1, 2, 4, 8, 11, 14, 15, 22], "code": [1, 2, 7, 11, 12, 16, 20, 21, 22, 25], "extract": [1, 19], "docstr": 1, "dscribe": [1, 4, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "subpackag": [1, 10], "core": [1, 5, 10, 14, 18], "submodul": [1, 10, 12], "lattic": [1, 5, 10, 21], "modul": [1, 4, 10, 25], "system": [1, 2, 5, 7, 9, 10, 12, 15, 16, 18, 19, 21, 23, 24, 25, 28], "content": [1, 10, 14], "descriptor": [1, 2, 3, 4, 5, 6, 10, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27], "acsf": [1, 2, 5, 10, 11, 16, 26], "coulombmatrix": [1, 2, 5, 10, 17], "descriptorglob": [1, 4, 5, 10], "descriptorloc": [1, 4, 5, 10], "descriptormatrix": [1, 5, 10], "ewaldsummatrix": [1, 2, 5, 10, 18], "lmbtr": [1, 2, 5, 10, 11, 19, 29], "mbtr": [1, 2, 5, 10, 11, 16, 19, 20, 22, 26], "check_geometri": [1, 5, 7], "check_grid": [1, 5, 7], "check_weight": [1, 5, 7], "sinematrix": [1, 2, 5, 10, 21], "soap": [1, 2, 5, 10, 11, 14, 15, 22, 24, 25, 26, 27], "valleoganov": [1, 2, 5, 10, 23], "kernel": [1, 5, 10, 13, 20, 22, 28], "averagekernel": [1, 5, 10, 26], "localsimilaritykernel": [1, 5, 10], "rematchkernel": [1, 5, 10, 26], "util": [1, 4, 5, 10], "dimension": [1, 2, 5, 7, 10, 14, 15, 16, 17, 27], "is1d": [1, 5, 9], "is2d": [1, 5, 9], "geometri": [1, 2, 5, 7, 10, 14, 19, 22, 23, 29], "get_adjacency_list": [1, 5, 9], "get_adjacency_matrix": [1, 5, 9], "get_extended_system": [1, 5, 9], "speci": [1, 5, 7, 10, 14, 16, 19, 20, 22, 23, 24, 25, 26, 27, 29], "get_atomic_numb": [1, 5, 9], "symbols_to_numb": [1, 5, 9], "stat": [1, 5, 10], "system_stat": [1, 5, 9], "ext": [1, 10], "acsfwrapp": [1, 5, 10], "atomic_numb": [1, 5, 7, 9, 10, 20], "creat": [1, 2, 4, 5, 6, 7, 8, 9, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "g3_param": [1, 5, 7, 10, 16], "g4_param": [1, 5, 7, 10, 16], "g5_param": [1, 5, 7, 10, 16], "get_g2_param": [1, 5, 10], "n_g2": [1, 5, 10], "n_g3": [1, 5, 10], "n_g4": [1, 5, 10], "n_g5": [1, 5, 10], "n_type_pair": [1, 5, 10], "n_type": [1, 5, 7, 10], "r_cut": [1, 2, 5, 7, 10, 14, 16, 18, 19, 20, 22, 23, 25, 26, 27], "set_g2_param": [1, 5, 10], "celllist": [1, 5, 10], "get_neighbours_for_index": [1, 5, 10], "get_neighbours_for_posit": [1, 5, 10], "celllistresult": [1, 5, 10], "distanc": [1, 5, 6, 7, 9, 10, 19, 20, 22, 23, 25, 29], "distances_squar": [1, 5, 10], "indic": [1, 5, 7, 9, 10, 15, 16, 19, 22, 25], "derivatives_numer": [1, 5, 7, 10], "extendedsystem": [1, 5, 10], "posit": [1, 2, 5, 6, 7, 9, 10, 11, 14, 15, 19, 21, 23, 25, 27, 28, 29], "mbtrwrapper": [1, 5, 10], "get_k1": [1, 5, 10], "get_k2": [1, 5, 10], "get_k2_loc": [1, 5, 10], "get_k3": [1, 5, 10], "get_k3_loc": [1, 5, 10], "soapgto": [1, 5, 10], "derivatives_analyt": [1, 5, 7, 10], "soappolynomi": [1, 5, 10], "extend_system": [1, 5, 10], "1": [2, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "ad": [2, 7, 15, 19, 20, 22, 29], "new": [2, 3, 4, 7, 9, 11, 14, 15], "compress": [2, 5, 7, 22, 26], "option": [2, 6, 7, 8, 9, 14, 15, 18, 19, 20, 21, 22, 23], "courtesi": 2, "jlparki": 2, "remov": [2, 9, 20], "crossov": [2, 7, 22], "paramet": [2, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26], "now": [2, 7, 22, 25], "wheel": [2, 12], "distribut": [2, 5, 6, 7, 8, 9, 12, 17, 18, 19, 20, 21], "linux": [2, 12], "maco": [2, 12], "window": 2, "fix": [2, 6, 7, 11, 14, 24], "except": [2, 5, 6, 7, 8, 9, 20], "being": [2, 29], "rais": [2, 7, 20], "when": [2, 3, 6, 7, 12, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "analyt": [2, 7, 15, 22, 25], "deriv": [2, 3, 5, 7, 11, 14, 25, 27, 28], "were": [2, 7, 8, 15], "request": [2, 4, 7, 16, 17, 18, 19, 20, 21, 22, 23], "weight": [2, 5, 7, 18, 19, 23, 24, 25, 29], "turn": [2, 22], "see": [2, 5, 6, 7, 8, 9, 12, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 26, 29], "89": 2, "numer": [2, 7, 11, 14, 15, 26], "attach": [2, 7, 15], "true": [2, 6, 7, 8, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29], "support": [2, 7, 12, 20, 22, 23, 26, 27], "get": [2, 6, 7, 11, 14, 17, 25, 28], "period": [2, 5, 6, 7, 9, 14, 16, 18, 19, 23, 24, 25, 26, 27, 29], "smooth_cutoff": [2, 7, 19, 20], "valle_oganov": [2, 7, 20, 23], "normal": [2, 5, 7, 8, 17, 18, 19, 21, 22, 23, 26], "tutori": [2, 4, 11, 14, 15, 19, 22, 23, 24, 25, 26, 29], "visual": [2, 7, 11, 14, 24], "atom": [2, 6, 7, 8, 9, 11, 14, 15, 17, 18, 19, 20, 21, 23, 24, 25, 26, 28, 29], "taken": [2, 20, 22, 25, 26], "account": [2, 6, 7, 20, 26], "chang": [2, 7, 17, 19, 20, 22, 24], "renam": 2, "argument": [2, 7, 8, 16, 19, 20, 22, 23], "local": [2, 7, 8, 11, 12, 14, 15, 16, 22, 28], "center": [2, 6, 7, 9, 11, 15, 17, 19, 22, 25, 28], "been": [2, 7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 23], "simplifi": [2, 22, 24], "so": [2, 7, 17, 20, 22], "onli": [2, 6, 7, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "one": [2, 6, 7, 14, 15, 17, 18, 20, 21, 22, 24, 25, 29], "term": [2, 7, 17, 18, 19, 20, 22, 23], "calcul": [2, 6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "onc": [2, 14, 25, 26], "unflatten": [2, 5, 7, 18, 21], "output": [2, 6, 7, 9, 14, 15, 16, 17, 18, 19, 20, 21, 24, 25, 28], "rcut": 2, "nmax": 2, "lmax": 2, "n_max": [2, 7, 14, 22, 24, 25, 26, 27], "l_max": [2, 7, 14, 22, 24, 25, 26, 27], "instead": [2, 7, 15, 17, 18, 22, 23], "gcut": 2, "g_max": 2, "3": [2, 6, 7, 8, 12, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 29], "thank": 2, "jarnlaak": 2, "note": [2, 6, 7, 14, 17, 18, 21, 23], "function": [2, 4, 5, 7, 8, 11, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 27, 28, 29], "how": [2, 6, 7, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 29], "emploi": 2, "map": [2, 7, 8, 20, 22, 23, 28, 29], "featur": [2, 7, 8, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "space": [2, 7, 8, 14, 15, 17, 18, 20, 22, 23, 25, 26, 27, 29], "color": [2, 21, 24, 25], "an": [2, 5, 6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 28, 29], "order": [2, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27], "sorted_l2": [2, 7, 17, 18, 21], "wa": [2, 17, 18, 24], "introduc": [2, 17, 28], "deprec": 2, "vall": [2, 7, 11, 20, 28], "oganov": [2, 7, 11, 20, 28], "tensorflow": [2, 25], "implement": [2, 4, 7, 15, 22, 23, 25, 27], "forc": [2, 15, 28], "field": [2, 15, 28], "train": [2, 7, 16, 19, 22, 28], "xscoschx": [2, 25], "memori": [2, 7, 28], "leak": 2, "69": 2, "increas": [2, 16, 22], "precis": [2, 7, 8, 19, 20, 22, 23], "70": [2, 17], "20": [2, 6, 7, 13, 18, 22, 23, 25, 26], "gto": [2, 7, 22], "basi": [2, 5, 6, 7, 8, 9, 22], "gaussian": [2, 7, 8, 13, 17, 18, 19, 20, 21, 22, 23, 26], "contribut": [2, 19, 20, 22, 25, 26], "densiti": [2, 7, 20, 22], "updat": [2, 3, 11, 12, 14, 25], "58": 2, "63": 2, "respect": [2, 7, 8, 14, 15, 16, 17, 19, 20, 22, 25], "non": [2, 7, 13, 17, 18, 22, 23, 27], "ani": [2, 4, 5, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 25, 26, 29], "configur": [2, 7, 8, 14, 22], "radial": [2, 7, 9, 19, 20, 22, 23], "attribut": [2, 7, 16, 17, 18, 19, 20, 21, 22, 23], "instruct": [2, 4], "take": [2, 6, 7, 9, 17, 18, 20, 21, 22, 24, 25], "defin": [2, 6, 7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 25, 26, 29], "pbc": [2, 6, 7, 16, 17, 19, 20, 22], "ase": [2, 6, 7, 9, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "set": [2, 6, 7, 9, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29], "also": [2, 7, 12, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 28, 29], "make": [2, 7, 19, 20, 22, 25, 26], "your": [2, 4, 14, 15, 17, 18, 21, 22, 28], "want": [2, 7, 14, 16, 17, 19, 20, 22, 28, 29], "direct": [2, 6, 7, 9, 20], "through": [2, 7, 12, 14, 15, 18, 19, 20, 22, 25, 26], "spars": [2, 5, 6, 7, 9, 14, 15, 16, 17, 18, 19, 20, 21, 23, 26, 28], "matric": [2, 6, 17, 18, 21, 27], "librari": [2, 3, 11, 14, 15, 27], "motiv": [2, 7, 19, 20], "need": [2, 6, 7, 12, 14, 15, 17, 18, 20, 21, 25, 26, 27], "n": [2, 6, 7, 8, 9, 16, 18, 19, 20, 21, 22, 23, 24, 26, 27, 29], "arrai": [2, 6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27], "variou": [2, 6, 11, 14], "place": [2, 6, 17, 28], "page": [2, 3, 13, 14, 15, 17, 20], "shape": [2, 7, 16, 17, 19, 20, 21, 22, 23, 24, 25], "have": [2, 7, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28], "made": [2, 13, 15], "consist": [2, 23], "across": [2, 7, 8, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 26], "differ": [2, 6, 7, 9, 14, 15, 17, 18, 19, 20, 22, 23, 24, 26, 29], "global": [2, 7, 8, 15, 17, 22, 23, 26], "produc": [2, 7, 14, 25], "1d": [2, 7], "flatten": [2, 7, 18, 20, 21], "2d": [2, 6, 7, 9, 14, 21, 24, 27], "singl": [2, 7, 14, 15, 19, 20, 22, 23, 24, 27], "whenev": [2, 7, 15, 27], "multipl": [2, 6, 7, 15, 16, 17, 18, 19, 20, 21, 22], "given": [2, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23], "dimens": [2, 7, 14, 15, 16, 17, 18, 19, 21, 22, 25], "run": [2, 4, 7, 12, 15, 22, 25], "same": [2, 7, 8, 9, 14, 15, 17, 20, 22, 23, 26, 27, 29], "becom": [2, 7, 15, 20, 26, 27], "five": [2, 15], "otherwis": [2, 6, 7, 15, 17], "list": [2, 5, 7, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "four": [2, 15, 19, 22], "4": [2, 7, 16, 17, 18, 20, 21, 22, 24], "averag": [2, 7, 8, 14, 27], "mode": [2, 7, 22, 26], "44": 2, "layout": 2, "size": [2, 7, 11, 14, 15, 17, 18, 19, 20, 21, 22, 25, 27, 29], "incorrectli": 2, "miss": 2, "element": [2, 7, 8, 9, 14, 16, 17, 18, 19, 20, 21, 22, 23], "48": 2, "migrat": 2, "complet": [2, 7, 15, 17, 20, 22], "cython": 2, "pybind11": [2, 12], "5": [2, 6, 7, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 29], "python": [2, 7, 11, 12, 14], "8": [2, 4, 6, 7, 12, 14, 17, 20, 21, 22, 25, 26, 27, 29], "40": [2, 18], "perform": [2, 7, 14, 20, 22, 24, 25, 29], "combin": [2, 7, 20, 22, 29], "veri": [2, 14, 15, 20, 21, 22, 23, 25, 27, 28, 29], "larg": [2, 7, 15, 18, 27, 29], "31": 2, "consid": [3, 6, 7, 9, 16, 19, 24], "articl": [3, 11, 13, 14, 18], "author": [3, 4], "himanen": [3, 7, 13, 22], "lauri": [3, 7, 13, 22], "j": [3, 6, 7, 8, 16, 17, 18, 20, 21, 22, 23], "ger": [3, 22], "marc": [3, 7, 13, 22], "o": [3, 6, 7, 9, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27], "morooka": [3, 7, 22], "eiaki": [3, 7, 22], "v": [3, 7, 17, 18, 20, 22], "federici": [3, 7, 22], "canova": [3, 7, 22], "filippo": [3, 7, 22], "ranawat": 3, "yashasvi": 3, "gao": 3, "david": 3, "z": [3, 6, 7, 15, 16, 17, 21, 22, 24], "rink": [3, 13], "patrick": [3, 13], "foster": [3, 7, 22], "adam": [3, 7, 22, 25], "titl": 3, "machin": [3, 7, 11, 14, 15, 17, 19, 20, 21, 22, 23, 25], "learn": [3, 7, 8, 11, 14, 15, 17, 19, 20, 21, 22, 23, 26], "materi": [3, 11, 14, 20, 22], "scienc": [3, 11, 14], "journal": [3, 7, 13, 21], "commun": [3, 7, 12], "volum": [3, 7, 20], "247": 3, "106949": 3, "year": 3, "doi": [3, 7, 8, 13, 17, 18, 21, 22], "10": [3, 6, 7, 8, 12, 13, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29], "1016": [3, 7], "cpc": 3, "2019": [3, 5, 6, 7, 8, 9, 22], "url": [3, 17], "http": [3, 5, 6, 7, 8, 9, 12, 17, 18, 22], "org": [3, 5, 6, 7, 8, 9, 18, 22], "issn": 3, "0010": [3, 7], "4655": [3, 7], "addition": [3, 17, 18], "dscribe2": 3, "laakso": 3, "jarno": 3, "homm": 3, "henrietta": 3, "oj": 3, "todorovi": 3, "c": [3, 6, 7, 8, 12, 14, 17, 19, 20, 22, 24, 25, 26, 27], "milica": [3, 13], "chemic": [3, 7, 9, 13, 14, 16, 19, 20, 22, 23, 24, 27, 28], "158": 3, "23": 3, "2023": 3, "publish": [3, 17], "aip": 3, "follow": [4, 6, 7, 11, 12, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27], "wish": [4, 7, 15, 22, 25], "contact": [4, 13], "idea": [4, 22, 29], "read": [4, 6, 14, 17], "below": [4, 7, 12, 17, 22], "fork": 4, "repositori": [4, 25], "do": [4, 7, 15, 17, 20, 22, 24, 25, 27, 28, 29], "modif": [4, 19], "within": [4, 6, 9, 19, 22], "class": [4, 5, 6, 7, 8, 9, 14, 20, 22, 24, 25, 26, 27], "dsribe": 4, "should": [4, 6, 7, 8, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 28], "inherit": [4, 6], "test": [4, 7, 11, 12, 25], "pytest": 4, "framework": [4, 19, 23], "sever": [4, 12, 17, 25, 28], "found": [4, 11, 25], "conftest": 4, "py": [4, 12, 17, 18, 19, 20, 21, 22, 23, 25], "exist": 4, "succesfulli": 4, "first": [4, 6, 7, 9, 14, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26], "instal": [4, 25], "depend": [4, 7, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 26], "pip": 4, "r": [4, 6, 7, 18, 21, 22, 23, 24, 25], "devrequir": 4, "txt": 4, "root": 4, "folder": 4, "doc": 4, "src": 4, "pull": 4, "we": [4, 6, 12, 15, 18, 19, 20, 22, 24, 25, 26, 28, 29], "black": 4, "which": [4, 6, 7, 9, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "pep": 4, "compliant": 4, "good": [4, 15, 17], "thing": [4, 24], "about": [4, 14, 20, 22], "simpli": [4, 9, 14, 22, 24, 25, 27, 28, 29], "autoformatt": 4, "fullfil": 4, "befor": [4, 7, 12, 14, 20, 22, 25, 26], "commit": 4, "pre": [4, 24], "hook": 4, "automat": [4, 7, 12, 19, 22, 23, 25, 29], "format": [4, 7, 14, 20, 21, 24, 25, 27], "unformat": 4, "caught": 4, "check": [4, 7, 11, 15, 19, 22, 23, 25], "ci": 4, "googl": 4, "guid": 4, "interpret": [4, 7, 8, 20, 21], "sphinx": 4, "napoleon": 4, "extens": [4, 7, 12, 18, 20], "abc": [5, 6, 7, 8], "get_cartesian_coord": [5, 6], "get_fractional_coord": [5, 6], "get_points_in_spher": [5, 6], "inv_matrix": [5, 6], "length": [5, 6, 7, 19, 20, 22], "matrix": [5, 6, 7, 8, 9, 11, 16, 19, 20, 22, 23, 26, 28], "reciprocal_lattic": [5, 6], "reciprocal_lattice_crystallograph": [5, 6], "from_atom": [5, 6], "get_cell_invers": [5, 6], "get_displacement_tensor": [5, 6], "get_distance_matrix": [5, 6], "get_distance_matrix_within_radiu": [5, 6], "get_inverse_distance_matrix": [5, 6], "set_cel": [5, 6, 17, 29], "set_pbc": [5, 6, 17], "set_posit": [5, 6], "set_scaled_posit": [5, 6], "to_cartesian": [5, 6], "to_scal": [5, 6], "create_singl": [5, 7], "g2_param": [5, 7, 16], "get_number_of_featur": [5, 7, 16, 17, 18, 19, 20, 21, 22, 23], "validate_derivatives_method": [5, 7], "check_atomic_numb": [5, 7], "create_parallel": [5, 7], "derivatives_parallel": [5, 7], "format_arrai": [5, 7], "derivatives_singl": [5, 7], "init_derivatives_arrai": [5, 7], "init_descriptor_arrai": [5, 7], "get_eigenspectrum": [5, 7], "get_matrix": [5, 7], "sort": [5, 7, 17, 18, 21], "sort_randomli": [5, 7], "zero_pad": [5, 7], "get_loc": [5, 7, 19, 20, 22, 23], "grid": [5, 7, 19, 20, 21, 23, 24, 29], "get_basis_gto": [5, 7], "get_basis_poli": [5, 7], "get_cutoff_pad": [5, 7], "init_internal_arrai": [5, 7], "init_internal_dev_arrai": [5, 7], "prepare_cent": [5, 7], "get_global_similar": [5, 8], "get_pairwise_matrix": [5, 8], "arg": [5, 7], "kwarg": [5, 7], "base": [5, 6, 7, 8, 12, 15, 16, 19, 22, 24, 26, 28], "pybind11_object": 5, "overload": 5, "__init__": [5, 16, 17, 18, 19, 20, 21, 22, 23, 25], "self": [5, 6, 18, 25], "arg0": 5, "float": [5, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23, 25], "arg1": 5, "arg2": 5, "arg3": 5, "arg4": 5, "arg5": 5, "int": [5, 7, 9, 16, 17, 18, 19, 20, 21, 22, 23, 25], "none": [5, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 25], "properti": [5, 6, 7, 14, 20, 21, 25, 29], "numpi": [5, 6, 7, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29], "ndarrai": [5, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23], "float64": [5, 7, 16, 18, 19, 20, 21, 22, 23], "str": [5, 6, 7, 9, 19, 20, 22, 23], "int32": 5, "bool": [5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23], "arg6": 5, "arg7": 5, "dict": [5, 6, 7, 9, 19, 20, 22], "arg8": 5, "arg9": 5, "arg10": 5, "arg11": 5, "arg12": 5, "arg13": 5, "arg14": 5, "extend": [5, 7, 9], "copyright": [5, 6, 7, 8, 9], "licens": [5, 6, 7, 8, 9], "mai": [5, 6, 7, 8, 9, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "file": [5, 6, 7, 8, 9, 12], "complianc": [5, 6, 7, 8, 9], "obtain": [5, 6, 7, 8, 9], "copi": [5, 6, 7, 8, 9, 19, 20, 21], "www": [5, 6, 7, 8, 9], "unless": [5, 6, 7, 8, 9], "requir": [5, 6, 7, 8, 9, 12, 14, 17, 19, 22, 25], "applic": [5, 6, 7, 8, 9, 15, 20, 28], "law": [5, 6, 7, 8, 9], "agre": [5, 6, 7, 8, 9], "write": [5, 6, 7, 8, 9, 14, 29], "AS": [5, 6, 7, 8, 9], "without": [5, 6, 7, 8, 9, 20, 24, 25], "warranti": [5, 6, 7, 8, 9], "OR": [5, 6, 7, 8, 9], "condit": [5, 6, 7, 8, 9, 17, 22], "OF": [5, 6, 7, 8, 9], "kind": [5, 6, 7, 8, 9, 19, 20, 26], "either": [5, 6, 7, 8, 9, 14, 15, 18, 19, 20, 22, 27], "express": [5, 6, 7, 8, 9], "impli": [5, 6, 7, 8, 9], "specif": [5, 6, 7, 8, 9, 14, 16, 17, 18, 20, 21, 22], "languag": [5, 6, 7, 8, 9], "govern": [5, 6, 7, 8, 9], "permiss": [5, 6, 7, 8, 9], "limit": [5, 6, 7, 8, 9], "sourc": [6, 7, 8, 9, 11, 16, 17, 18, 19, 20, 21, 22, 23], "object": [6, 7, 8, 14, 17, 18, 21, 22], "A": [6, 7, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26], "essenti": [6, 7, 17, 19, 20, 22, 24], "convers": [6, 18], "In": [6, 7, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "assum": [6, 8, 9], "unit": [6, 7, 14, 18, 20, 21, 22], "angstrom": [6, 7, 16, 19, 20, 22, 23], "angl": [6, 7, 19, 20, 23], "degre": [6, 7, 8, 19, 20, 22, 23], "state": 6, "sequenc": 6, "9": [6, 12, 17, 22, 25], "row": [6, 7, 17, 18, 21, 22, 25], "time": [6, 7, 9, 14, 19, 20, 22, 23, 25], "each": [6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27, 28, 29], "repres": [6, 7, 14, 16, 17, 18, 20, 22, 24, 26], "vector": [6, 7, 8, 14, 15, 16, 20, 21, 22, 24, 25, 26, 27], "form": [6, 7, 19, 20, 21, 22, 24, 29], "exampl": [6, 7, 11, 14, 24, 25, 26, 27, 28, 29], "accept": [6, 8], "input": [6, 7, 8, 14, 16, 19, 20, 22, 24, 25], "actual": 6, "ii": [6, 8, 21], "iii": 6, "iv": 6, "correspond": [6, 7, 9, 17, 18, 19, 20, 22, 23, 29], "e": [6, 7, 8, 12, 14, 15, 18, 19, 20, 21, 22, 24, 25, 26, 27, 29], "g": [6, 7, 8, 12, 14, 15, 16, 20, 22, 24, 26, 27, 29], "30": [6, 25], "specifi": [6, 7, 8, 9, 12, 15, 17, 18, 20, 21, 22], "b": [6, 7, 8, 19, 20, 21, 22, 26], "fractional_coord": 6, "return": [6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 29], "cartesian": [6, 7, 15, 19, 21, 22], "coordin": [6, 7, 9], "fraction": 6, "3x1": 6, "coord": 6, "cart_coord": 6, "frac_point": 6, "zip_result": 6, "point": [6, 7, 8, 19, 20, 22, 23, 24, 25], "sphere": 6, "boundari": [6, 17, 22, 29], "includ": [6, 7, 9, 11, 13, 15, 16, 20, 22, 28], "site": [6, 7, 14, 22, 24], "other": [6, 7, 8, 14, 17, 22, 24, 28], "imag": [6, 17, 29], "algorithm": [6, 8, 20, 24], "radiu": [6, 7, 9, 18], "crystal": [6, 7, 18, 20, 22, 23], "determin": [6, 7, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 29], "minimum": [6, 7, 9, 19, 20], "supercel": [6, 20], "parallelpip": 6, "would": [6, 17, 19, 20, 22, 23, 25, 29], "contain": [6, 7, 9, 12, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 29], "a_1": 6, "perpendicular": 6, "a_2": 6, "a_3": 6, "b_1": 6, "mani": [6, 7, 11, 16, 17, 18, 21, 22, 23, 25, 27, 28, 29], "nxmax": 6, "length_of_b_1": 6, "pi": [6, 7, 18, 20, 21, 22, 23], "keep": [6, 7, 16, 17, 19, 20, 22, 23], "fall": 6, "whether": [6, 7, 8, 9, 15, 16, 17, 18, 19, 20, 21, 22, 23], "zip": 6, "result": [6, 7, 16, 17, 18, 21, 22, 24, 25, 26], "togeth": [6, 7, 15, 18, 20], "raw": [6, 20], "fcoord": 6, "dist": [6, 29], "index": [6, 7, 9, 15, 16, 17, 20, 23], "sinc": [6, 12, 15, 17, 22, 29], "most": [6, 7, 15, 20, 24], "subsequ": 6, "process": [6, 7, 13, 15, 17, 18, 21], "els": [6, 9, 25], "ind": 6, "type": [6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23], "invers": [6, 7, 19, 20], "reciproc": [6, 7, 18], "standard": [6, 7, 17, 18, 19, 20, 21, 22, 23, 25], "solid": [6, 7, 8, 19, 20, 22, 26], "factor": [6, 7, 8, 19, 20], "look": [6, 15, 17, 23, 24, 25, 29], "crystallograph": 6, "lazili": 6, "effici": [6, 7, 14, 15, 27], "symbol": [6, 7, 9, 14, 16, 19, 20, 22, 23], "tag": 6, "momenta": 6, "mass": 6, "magmom": 6, "charg": [6, 7, 17, 18], "scaled_posit": 6, "cell": [6, 7, 9, 14, 18, 20, 22, 23, 24], "celldisp": 6, "constraint": 6, "info": 6, "wyckoff_posit": 6, "equivalent_atom": 6, "intern": [6, 7, 21], "add": [6, 7, 17], "cach": 6, "consum": 6, "quantiti": [6, 20, 22, 25], "share": 6, "static": 6, "ASE": [6, 9, 14, 18, 21, 22], "where": [6, 7, 8, 12, 16, 17, 18, 19, 20, 21, 22, 23, 26, 29], "entri": [6, 7, 9, 21, 22, 27], "cartesian_po": 6, "itself": [6, 7, 17, 29], "smallest": 6, "displac": 6, "two": [6, 7, 8, 14, 16, 17, 18, 20, 21, 22, 25, 26, 27, 29], "closest": 6, "3d": [6, 7, 27], "pairwis": [6, 7, 8, 9, 19, 20, 23, 26], "np": [6, 7, 8, 9, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29], "a_": 6, "ij": [6, 7, 8, 17, 18, 19, 20, 21, 26], "lvert": [6, 21, 22], "mathbf": [6, 8, 21, 22, 25, 26], "_i": [6, 22, 25], "_j": 6, "rvert": [6, 21, 22], "symmetr": [6, 9, 17, 22], "po": 6, "output_typ": [6, 9], "coo_matrix": [6, 7, 9], "certain": [6, 9, 24], "cutoff": [6, 7, 9, 16, 18, 19, 20, 22, 23], "k": [6, 7, 8, 9, 17, 19, 20, 21, 22, 23, 24, 25, 26], "d": [6, 7, 9, 21, 22, 24, 25], "tree": [6, 9, 20], "reach": [6, 7, 9], "log": [6, 7, 9, 19, 20], "complex": [6, 9, 22, 28], "outsid": [6, 9], "data": [6, 7, 9, 17, 19, 20, 22, 23, 24, 25, 29], "dok_matrix": [6, 9], "default": [6, 7, 8, 9, 12, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25], "frac": [6, 7, 8, 17, 18, 21, 22, 25, 26], "scale_atom": 6, "fals": [6, 7, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27], "3x3": 6, "6": [6, 7, 16, 17, 18, 21, 22, 24, 26], "three": [6, 7, 15, 16, 22], "just": [6, 17], "orthorhomb": [6, 20], "anoth": [6, 18, 29], "describ": [6, 19], "between": [6, 7, 8, 12, 15, 17, 18, 19, 20, 21, 22, 23, 25, 26, 29], "len": [6, 20, 23, 25, 29], "lie": 6, "x": [6, 7, 8, 12, 15, 19, 20, 21, 23, 24, 25], "second": [6, 7, 8, 9, 15, 16, 17, 19, 22, 24, 25], "xy": [6, 21], "plane": [6, 21, 24], "third": [6, 7], "subspac": 6, "move": [6, 7, 14, 15], "behavior": 6, "apply_constraint": 6, "equival": [6, 22], "wai": [6, 7, 14, 15, 16, 18, 19, 22, 24, 25, 26], "he": 6, "7": [6, 12, 16, 17, 25, 26, 29], "fcc": [6, 18, 19, 20, 21, 22, 24, 29], "hexagon": 6, "90": [6, 17], "120": 6, "rhombohedr": 6, "alpha": [6, 7, 8, 18, 21, 26], "77": 6, "flag": 6, "newposit": 6, "honor": 6, "To": [6, 7, 11, 12, 20, 22, 24], "ignor": [6, 7, 8, 17, 19, 20], "scale": [6, 7, 14, 19, 20, 22, 23, 25, 29], "rel": [6, 7, 18, 26], "wrap": 6, "transform": [6, 9, 11, 14, 17, 20, 25], "insid": 6, "dtype": [7, 9, 16, 18, 19, 20, 21, 22, 23], "symmetri": [7, 11, 22, 28], "notic": [7, 14, 15, 16, 18, 19, 20, 21, 22, 23, 25], "central": [7, 16, 19, 22], "encod": [7, 17, 19, 20, 21, 22], "surround": 7, "environ": [7, 8, 14, 16, 19, 22, 25, 28], "typic": [7, 12, 15, 22, 25], "model": [7, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25], "refer": [7, 8, 22], "construct": [7, 9, 16, 20, 22], "high": [7, 16], "neural": [7, 16, 17, 25], "network": [7, 16, 25], "potenti": [7, 16, 17, 22, 25], "j\u00f6rg": 7, "behler": [7, 16], "134": [7, 16], "074106": [7, 16], "2011": [7, 16], "1063": [7, 13], "3553717": 7, "smooth": [7, 11, 16, 17, 19, 20, 28], "valu": [7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29], "throughout": [7, 16], "pair": [7, 16, 20, 23], "eta": [7, 16], "r_": [7, 16, 17, 19, 20, 22, 23], "kappa": [7, 16], "triplet": [7, 16, 20], "zeta": [7, 16], "lambda": [7, 16], "iter": [7, 8, 9, 16, 19, 20, 22, 23], "present": [7, 9, 14, 16, 19, 20, 22, 23], "individu": [7, 16, 19, 20, 22, 23, 26], "ever": [7, 16, 19, 20, 22, 23], "go": [7, 16, 19, 20, 22, 23], "low": [7, 16, 19, 20, 21, 22, 23], "prefer": [7, 15, 16, 19, 20, 22, 23], "constructor": [7, 8, 15, 16, 17, 18, 19, 20, 21, 22], "dens": [7, 15, 16, 17, 18, 19, 20, 21, 22, 23, 27], "n_job": [7, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "only_physical_cor": [7, 16, 17, 18, 19, 20, 21, 22, 23], "verbos": [7, 16, 17, 18, 19, 20, 21, 22, 23], "One": [7, 16, 17, 18, 19, 20, 21, 22, 23, 25], "provid": [7, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28], "parallel": [7, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "job": [7, 15, 16, 17, 18, 19, 20, 21, 22, 23], "instanti": [7, 14, 16, 17, 18, 19, 20, 21, 22, 23], "sampl": [7, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29], "serial": [7, 16, 17, 18, 19, 20, 21, 22, 23], "neg": [7, 16, 17, 18, 19, 20, 21, 22, 23, 25], "cpu": [7, 16, 17, 18, 19, 20, 21, 22, 23], "n_cpu": [7, 16, 17, 18, 19, 20, 21, 22, 23], "amount": [7, 9, 16, 17, 18, 19, 20, 21, 22, 23], "report": [7, 16, 17, 18, 19, 20, 21, 22, 23], "With": [7, 16, 17, 18, 19, 20, 21, 22, 23], "control": [7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 23], "count": [7, 16, 17, 18, 19, 20, 21, 22, 23], "virtual": [7, 16, 17, 18, 19, 20, 21, 22, 23], "print": [7, 16, 17, 18, 19, 20, 21, 22, 23, 25], "progress": [7, 16, 17, 18, 19, 20, 21, 22, 23], "consol": [7, 16, 17, 18, 19, 20, 21, 22, 23], "coo": [7, 14, 16, 17, 18, 20, 21, 22, 23, 27], "around": [7, 15, 25], "inquir": 7, "final": [7, 8, 17, 18, 21], "method": [7, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 28], "valid": [7, 14, 19, 20, 22, 23, 25], "n_atoms_max": [7, 9, 17, 18, 21], "permut": [7, 18, 21, 25], "sigma": [7, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29], "seed": [7, 17, 18, 21, 29], "zero": [7, 8, 18, 21, 22, 25, 27, 29], "pad": [7, 18, 21], "coulomb": [7, 11, 18, 19, 20, 21, 26, 28], "c_ij": 7, "zi": 7, "expon": 7, "zj": 7, "ri": 7, "rj": 7, "invis": 7, "mean": [7, 14, 15, 19, 20, 24, 25, 26, 27], "until": 7, "maximum": [7, 9, 17, 18, 19, 20, 21, 22], "allow": [7, 15, 17, 22, 25], "n_max_atom": 7, "invari": [7, 18, 21], "against": [7, 15, 24], "fast": [7, 17], "accur": [7, 17, 22], "molecular": [7, 13, 17], "energi": [7, 13, 17, 20, 21, 25], "matthia": [7, 13, 17, 20], "rupp": [7, 13, 17, 20], "alexandr": [7, 17], "tkatchenko": [7, 17], "klau": [7, 17], "robert": [7, 17], "mueller": 7, "anatol": [7, 17, 21], "von": [7, 17, 21], "lilienfeld": [7, 17, 21], "phy": [7, 8, 16, 17, 22, 26], "rev": [7, 17, 22], "lett": [7, 17], "2012": [7, 17, 23], "1103": [7, 17, 22], "physrevlett": [7, 17], "108": [7, 17], "058301": [7, 17], "represent": [7, 11, 17, 21, 22, 28], "molecul": [7, 8, 14, 16, 17, 19, 20, 22, 26, 27], "predict": [7, 13, 17, 20, 25], "gregoir": 7, "montavon": [7, 17], "et": [7, 22], "al": [7, 18, 19, 21, 22], "advanc": [7, 17, 22, 29], "inform": [7, 11, 14, 17, 18, 19, 24], "25": [7, 17], "nip": [7, 17], "nuber": [7, 17, 18, 21], "much": [7, 9, 15, 17, 18, 21, 22, 25, 28, 29], "string": [7, 8, 9, 17, 18, 21], "handl": [7, 14, 17, 18, 21, 24], "column": [7, 17, 18, 21], "l2": [7, 17, 18, 19, 20, 21], "norm": [7, 17, 18, 20, 21, 29], "eigenspectrum": [7, 17, 18, 21], "eigenvalu": [7, 17, 18, 21], "absolut": [7, 17, 18, 21], "descend": [7, 17, 18, 21], "random": [7, 17, 18, 21], "after": [7, 16, 17, 18, 19, 20, 21, 22, 23], "nois": [7, 17, 18, 20, 21, 29], "deviat": [7, 17, 18, 19, 20, 21, 22, 23], "randomli": [7, 17, 18, 21, 25], "scrambl": [7, 17, 18, 21], "draw": [7, 17, 18, 21], "return_descriptor": [7, 14, 15], "param": 7, "call": [7, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 27, 28], "faster": [7, 9, 14, 15, 22, 25], "both": [7, 15, 20, 22, 25, 27, 29], "tupl": [7, 9], "item": [7, 22, 23, 25], "n_atom": [7, 15, 17, 18, 20, 21, 25, 29], "n_featur": [7, 15, 16, 19, 20, 22, 23, 24, 25], "goe": [7, 22, 26], "over": [7, 17, 22, 25, 26], "compon": [7, 15], "y": [7, 8, 15, 19, 20, 21, 22, 24], "last": [7, 15, 25, 29], "abstract": [7, 8, 29], "valueerror": 7, "keyword": [7, 8], "scipi": [7, 9, 18, 19, 22, 27], "inp": 7, "func": 7, "static_s": 7, "creation": 7, "These": [7, 11, 14, 17, 18, 19, 20, 21, 22, 23, 25, 28], "fed": 7, "output_s": 7, "prealloc": 7, "correct": [7, 18, 22, 24, 25], "beforehand": [7, 16, 17, 18, 19, 20, 21, 22, 23], "dynam": [7, 24], "loki": 7, "backend": 7, "joblib": 7, "separ": [7, 14, 15, 16, 17, 18, 19, 21, 22, 29], "bigger": [7, 20, 22], "initi": [7, 25], "overhead": 7, "than": [7, 14, 17, 18, 21, 22], "thread": 7, "better": [7, 15, 18, 22, 25], "scalabl": 7, "perfom": 7, "lock": 7, "gil": 7, "beri": 7, "pure": 7, "ideal": 7, "releas": [7, 12], "desciptor": [7, 24, 25], "setup": [7, 12, 14], "derivatives_shap": 7, "descriptor_shap": 7, "its": [7, 19, 20, 22], "variabl": [7, 18, 25], "user": 7, "exclud": [7, 15], "auto": [7, 15], "cannot": 7, "4d": 7, "monolith": 7, "regular": [7, 8, 15], "n_system": 7, "case": [7, 12, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29], "fourth": 7, "overwrit": 7, "optim": [7, 22, 23, 24, 25], "off": [7, 17, 18, 22, 26, 27], "interper": 7, "chosen": [7, 20, 25], "behaviour": [7, 15], "ti": [7, 15, 29], "convert": [7, 15, 18, 27], "locat": [7, 15, 19, 24], "independ": [7, 15, 22], "dure": [7, 12, 15], "5d": 7, "n_center": [7, 15], "thei": [7, 11, 14, 15, 20, 22], "fifth": 7, "n_indic": 7, "common": [7, 19, 20, 22, 24], "bodi": [7, 11, 16, 22, 28], "like": [7, 15, 17, 20, 22, 23, 24, 25, 29], "width": [7, 18, 22, 23], "back": [7, 27], "purpos": [7, 14], "guess": 7, "ewald": [7, 11, 17, 28], "sum": [7, 11, 17, 22, 25, 28], "m_ij": 7, "summat": [7, 18], "constant": [7, 14, 18, 22], "neutral": [7, 18], "background": [7, 18], "counteract": 7, "net": 7, "total": 7, "electrostat": [7, 17], "interact": [7, 17, 18, 19, 20, 22, 25], "upper": 7, "diagon": [7, 17, 18], "part": [7, 13, 17, 18, 20, 21, 22, 29], "screen": [7, 18, 19, 20], "long": [7, 22, 25], "suffici": 7, "felix": [7, 21], "faber": [7, 21], "alexand": [7, 21], "lindmaa": [7, 21], "rickard": [7, 21], "armiento": [7, 21], "quantum": [7, 21, 22], "chemistri": [7, 13, 21, 22], "2015": [7, 21], "1002": [7, 21], "qua": [7, 21], "24917": [7, 21], "techniqu": [7, 18, 28, 29], "perspect": 7, "survei": 7, "abdulnour": 7, "toukmaji": 7, "john": 7, "board": 7, "jr": 7, "1996": 7, "96": 7, "00016": 7, "jackson": 7, "catlow": 7, "simul": [7, 14], "studi": [7, 15, 23], "zeolit": 7, "mol": 7, "207": 7, "224": 7, "1988": 7, "1080": [7, 18], "08927022": [7, 18], "2013": [7, 18, 22], "840898": [7, 18], "accuraci": [7, 15, 22], "1e": [7, 8, 18, 19, 20, 22, 23, 25, 26, 29], "05": [7, 18, 19], "w": [7, 18, 22], "g_cut": [7, 18], "converg": [7, 8, 18, 20, 23], "expens": [7, 18], "real": [7, 18, 22, 25, 28], "littl": [7, 18], "effect": [7, 15, 16, 17, 18, 19, 20, 23, 24, 25], "influenc": [7, 18, 19, 20, 23], "speed": [7, 15, 18], "dictat": [7, 18], "sqrt": [7, 8, 18, 22], "left": [7, 8, 17, 18, 21, 22, 25], "right": [7, 17, 18, 21, 22, 23, 25], "normalize_gaussian": [7, 19, 20, 23], "tensor": [7, 11, 25, 28], "finit": [7, 15], "deal": 7, "euclidean": [7, 17, 19, 20, 29], "measur": [7, 8, 14, 24, 26, 28, 29], "advis": [7, 19, 23], "some": [7, 14, 15, 19, 20, 21, 22, 23, 24, 26, 29], "doe": [7, 16, 17, 18, 19, 20, 22, 25, 29], "ident": [7, 16, 19, 20, 23, 25, 29], "correl": [7, 23], "neighour": 7, "distinguish": [7, 22, 25], "tell": [7, 19, 20, 23, 25], "involv": [7, 19, 20, 23, 25], "thu": [7, 14, 19, 20, 23, 25], "heavili": [7, 19, 20, 23], "inverse_dist": [7, 19, 20], "cosin": [7, 19, 20], "discret": [7, 19, 20, 23], "min": [7, 19, 20, 21, 23, 29], "max": [7, 19, 20, 21, 22, 23, 24, 29], "50": [7, 19, 20], "axi": [7, 19, 20, 21, 22, 24, 29], "broaden": [7, 19, 20, 23], "exp": [7, 19, 20, 22, 23, 29], "threshold": [7, 8, 19, 20, 22, 23, 26, 29], "uniti": [7, 19, 20], "No": [7, 12, 17, 19, 20, 22], "sx": [7, 19, 20], "inverse_squar": [7, 19, 20, 23], "f_": [7, 19, 20], "ik": [7, 19, 20], "f": [7, 17, 19, 20, 22, 23, 25, 29], "cut": [7, 19, 20, 22], "exponenti": [7, 8, 19, 20], "decai": [7, 19, 20, 22, 23], "rest": [7, 17, 19, 20], "wherea": [7, 19, 20], "indirectli": [7, 19, 20], "squar": [7, 19, 20, 25], "kei": [7, 19, 20, 22, 23, 28], "sharp": [7, 19, 20], "area": [7, 19, 20], "drop": [7, 19, 20], "mu": [7, 19, 20, 22], "speic": [7, 19, 20], "float32": [7, 19, 20, 22, 23], "doubl": [7, 19, 20, 22, 23], "csr_matrix": [7, 19], "integ": [7, 9, 20], "xyz": [7, 9, 14], "queri": [7, 20, 22], "mark": 7, "h": [7, 12, 16, 17, 19, 20, 22, 23, 25, 26, 27], "slice": [7, 20, 21, 22, 27], "target": [7, 25], "rang": [7, 20, 22, 23, 24, 25, 29], "invalid": 7, "least": [7, 29], "connect": [7, 25], "n_elem": 7, "multipli": [7, 9, 20, 22], "fill": [7, 29], "rule": 7, "sum_": [7, 8, 21, 22, 26], "divid": [7, 8, 20], "concaten": 7, "dictionari": [7, 9, 22], "sine": [7, 11, 17, 28], "cij": 7, "phi": [7, 18, 22], "r1": 7, "r2": 7, "ek": 7, "rbf": [7, 8, 22, 26], "species_weight": [7, 22], "partial": [7, 22, 25], "power": [7, 22, 24], "spectrum": [7, 22], "overlap": [7, 11, 20, 21, 23, 28], "orbit": [7, 13, 22], "tesser": [7, 22], "spheric": [7, 21, 22], "harmon": [7, 22], "angular": [7, 22], "orthonorm": [7, 22], "altern": 7, "primit": [7, 20], "polynomi": [7, 8, 17, 22], "On": [7, 12, 17, 22], "albert": [7, 8, 22, 26], "p": [7, 8, 22, 26], "bart\u00f3k": [7, 8], "risi": [7, 22], "kondor": [7, 22], "g\u00e1bor": [7, 8], "cs\u00e1nyi": [7, 8, 22], "87": [7, 22], "184115": [7, 22], "physrevb": [7, 22], "compar": [7, 8, 17, 19, 22, 23, 25, 26, 27], "alchem": [7, 8, 22, 26], "sandip": [7, 8, 22, 26], "de": [7, 8, 22, 26], "michel": [7, 8, 22, 26], "ceriotti": [7, 8, 22, 26], "chem": [7, 8, 16, 22, 26], "18": [7, 8, 22, 26], "13754": [7, 8, 22, 26], "2016": [7, 8, 22, 26], "1039": [7, 8, 22], "c6cp00415f": [7, 8, 22], "hydrogen": [7, 16, 17, 22], "adsorpt": [7, 22], "nanoclust": [7, 22], "j\u00e4ger": 7, "npj": [7, 22], "mater": [7, 22], "37": 7, "2018": [7, 22], "1038": [7, 22], "s41524": [7, 22], "018": [7, 22], "0096": [7, 22], "region": [7, 19, 22, 24], "expand": [7, 22], "g_": [7, 22], "nl": [7, 22], "n_": [7, 20, 22], "mathrm": [7, 8, 17, 21, 22, 26], "beta_": [7, 22], "nn": [7, 22, 25], "l": [7, 17, 22], "alpha_": [7, 22], "leav": [7, 22], "unspecifi": [7, 22], "current": [7, 11, 20, 22], "poli": [7, 22, 24], "begin": [7, 17, 21, 22, 25], "ll": [7, 22], "r_0": [7, 22], "m": [7, 8, 17, 22, 24, 26], "text": [7, 17, 18, 21, 22, 25], "leq": [7, 22], "end": [7, 17, 21, 22, 25], "exactli": [7, 22, 25], "explicitli": [7, 22, 25], "r0": [7, 22, 24], "caro": [7, 22], "enhanc": [7, 22, 23], "interatom": [7, 22], "100": [7, 19, 20, 21, 22, 23, 24], "024112": [7, 22], "pow": [7, 22], "willatt": [7, 22], "musil": [7, 22], "atomist": [7, 22, 23], "yield": [7, 22], "driven": [7, 22], "tabl": [7, 22], "29661": [7, 22], "29668": [7, 22], "w0": [7, 22], "top": [7, 19, 22, 24, 25], "hide": [7, 22], "overrid": [7, 22], "interest": [7, 14, 22, 29], "inner": [7, 22], "up": [7, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29], "magnet": [7, 22], "p_": [7, 8, 22, 26], "z_1": [7, 22], "z_2": [7, 22], "sim": [7, 22], "sum_m": [7, 22], "sum_i": [7, 22], "c_": [7, 8, 22, 26], "nlm": [7, 22], "lm": [7, 22], "outer": [7, 14, 22], "slightli": [7, 18, 22], "reduc": [7, 22, 24], "dramat": [7, 22], "henc": [7, 22], "cost": [7, 21, 22], "mu2": [7, 22], "agnost": [7, 22], "darbi": [7, 22], "It": [7, 14, 19, 20, 22, 23, 25], "still": [7, 15, 17, 22, 25, 27], "suppli": [7, 22], "mu1nu1": [7, 22], "nu": [7, 22], "scheme": [7, 15, 16, 19, 22], "inn": [7, 22], "sum_z": [7, 22], "word": [7, 22], "coeffici": [7, 8, 22], "select": [7, 12, 22, 24, 25], "linearli": [7, 22], "rather": [7, 22], "quadrat": [7, 22], "cross": [7, 14, 22], "uniqu": [7, 20, 22], "must": [7, 22], "match": [7, 8, 22, 26], "main": [7, 19, 22, 27], "kermod": [7, 22], "neighbourhood": [7, 22], "166": [7, 22], "2022": [7, 22], "022": [7, 22], "00847": [7, 22], "beta": 7, "prefactor": 7, "evalu": [7, 15, 25], "prepar": [7, 25], "shortcut": 7, "fingerprint": [7, 11, 16, 19, 23], "well": [7, 15, 22], "usag": [7, 17, 18, 20, 21, 22, 27], "metric": [8, 22, 24, 25, 26, 29], "gamma": [8, 26], "coef0": 8, "kernel_param": 8, "normalize_kernel": 8, "similar": [8, 11, 14, 17, 20, 22, 24, 29], "linear": [8, 22, 25, 26, 27], "callabl": 8, "sklearn": [8, 24, 25, 26], "laplacian": 8, "custom": [8, 15, 16, 19, 25, 29], "pass": [8, 25, 26], "chi2": 8, "sigmoid": [8, 25], "boolean": [8, 9], "achiev": [8, 20, 22, 28, 29], "k_": 8, "jj": 8, "localkernel": 8, "nxm": 8, "scikit": [8, 26], "06": 8, "entropi": 8, "rematch": 8, "declaremathoper": [8, 26], "argmax": [8, 26], "tr": [8, 26], "argmax_": [8, 26], "mathcal": [8, 22, 26], "u": [8, 13, 25, 26], "ln": [8, 26], "entrop": 8, "penalti": 8, "close": 8, "approach": [8, 15, 20, 22, 26], "best": [8, 14, 25, 26], "solut": [8, 26], "toward": [8, 22], "infin": 8, "sinkhorn": 8, "adjacency_matrix": 9, "adjac": 9, "access": [9, 14, 22, 23], "neighbour": [9, 16], "node": 9, "spmatrix": 9, "ith": 9, "pos1": 9, "pos2": 9, "radial_cutoff": 9, "return_cell_indic": 9, "origin": [9, 18, 20, 22], "cover": [9, 14, 25, 28], "exact": [9, 14], "original_system": 9, "duplic": 9, "repeat": [9, 22], "correpond": 9, "system_iter": 9, "gather": [9, 14], "statist": 9, "max_atomic_numb": 9, "highest": [9, 20], "min_atomic_numb": 9, "lowest": 9, "element_symbol": 9, "min_dist": 9, "often": [11, 14], "task": [11, 24], "analysi": 11, "etc": [11, 14, 25, 29], "start": [11, 14, 28, 29], "basic": [11, 19, 23], "name": [11, 19, 27], "full": [11, 25, 26, 29], "explor": 11, "newest": 12, "compat": 12, "11": 12, "latest": 12, "stabl": 12, "platform": 12, "cibuildwheel": 12, "exot": 12, "compil": 12, "step": [12, 14, 25, 29], "forg": 12, "command": 12, "clone": 12, "git": 12, "com": 12, "singroup": 12, "cd": 12, "init": [12, 25], "tool": [12, 24, 26], "line": [12, 17, 25], "face": 12, "fatal": 12, "error": [12, 17, 18, 21, 25], "directori": 12, "although": [12, 22], "experi": [12, 14, 22, 28], "correctli": [12, 19, 21, 24], "attempt": 12, "work": [12, 14, 15, 23, 26], "pythonx": 12, "dev": 12, "ubuntu": 12, "could": [12, 19, 22, 24, 29], "sudo": 12, "apt": 12, "python3": 12, "experienc": 12, "problem": [12, 20], "xcode": 12, "done": [12, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], "peer": 13, "review": [13, 22], "scientif": 13, "comprehens": 13, "think": 13, "philipp": 13, "bahlk": 13, "natnael": 13, "mogo": 13, "jonni": 13, "propp": 13, "carmen": 13, "herrmann": 13, "exchang": 13, "spin": 13, "coupl": 13, "regress": [13, 14], "1021": 13, "ac": 13, "jpca": 13, "0c05983": 13, "annika": 13, "stuke": 13, "todorovi\u0107": 13, "christian": 13, "kunkel": 13, "kunal": 13, "ghosh": 13, "divers": 13, "ridg": 13, "150": [13, 21], "204121": 13, "5086105": 13, "previou": [14, 23], "refresh": [14, 28], "built": 14, "summar": 14, "Such": 14, "supervis": [14, 24, 28], "unsupervis": [14, 28], "cluster": [14, 20, 28, 29], "analyz": [14, 19, 28], "our": [14, 15, 22, 24, 25, 29], "open": 14, "particular": [14, 15, 19, 22], "There": [14, 24, 25], "suitabl": [14, 20, 22], "channel": [14, 26], "multi": 14, "conveni": [14, 15, 25, 27], "manipul": 14, "io": [14, 29], "import": [14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "build": [14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29], "let": [14, 17, 18, 22, 24, 25, 26, 27, 29], "structure1": 14, "water": [14, 16, 19, 20, 22, 23], "structure2": 14, "h2o": [14, 16, 17, 19, 20, 22, 26, 27], "structure3": 14, "128": 14, "usual": 14, "knowledg": 14, "dataset": [14, 17], "wll": 14, "expect": [14, 22], "enough": 14, "get_chemical_symbol": [14, 17], "understand": [14, 15, 19, 23], "ones": 14, "proper": 14, "feed": [14, 20, 25], "feature_vector": 14, "store": [14, 15, 27], "later": [14, 24, 25], "everi": [15, 17], "similarli": [15, 23, 27], "howev": [15, 17, 18, 19, 20, 21, 22, 23, 29], "alwai": [15, 22, 23], "balanc": [15, 22, 25], "anywai": 15, "upon": 15, "split": [15, 17, 18, 21, 24], "decid": 15, "retain": 15, "re": [15, 26, 29], "arrang": [15, 20, 23], "organ": [15, 24, 25], "loop": [15, 17, 25], "quit": [15, 19], "easili": [15, 20, 22], "rearrang": 15, "moveaxi": 15, "grow": 15, "quickli": [15, 25], "give": [15, 22, 29], "signific": [15, 27], "save": [15, 24, 25, 27], "storag": 15, "opt": 15, "compos": 16, "detect": 16, "identifi": [16, 19, 20], "stratif": [16, 19, 22], "inclus": 16, "stratifi": 16, "pseudo": [16, 22], "append": [16, 22, 23, 25], "g1": 16, "g2": 16, "g3": 16, "g4": 16, "g5": 16, "acsf_wat": 16, "syntax": [16, 17, 18, 19, 20, 21, 22, 23, 27], "n_posit": [16, 19, 20, 22, 23], "\u00f6": 16, "rg": 16, "cm": [17, 24], "simpl": [17, 24, 25, 29], "mimic": 17, "nuclei": 17, "equat": [17, 18, 21, 25], "m_": [17, 21], "z_i": [17, 18, 21, 22, 25], "z_j": [17, 18, 21], "neq": [17, 18, 21], "seen": [17, 18], "fit": [17, 22, 24, 25], "nuclear": 17, "repuls": 17, "methanol": [17, 22], "bmatrix": [17, 25], "36": 17, "33": 17, "73": 17, "35": 17, "56": 17, "43": 17, "abov": [17, 24], "carbon": [17, 20], "likewis": 17, "displai": 17, "furthermor": 17, "oxygen": 17, "remain": 17, "sophist": 17, "reason": [17, 20, 22, 24], "apart": [17, 20], "understood": 17, "intuit": 17, "introduct": 17, "cm_methanol": 17, "no2": [17, 22], "co2": [17, 22, 27], "coulomb_matric": [17, 22], "lower": [17, 18, 21], "caus": [17, 18, 21], "equal": [17, 18, 20, 21, 22, 24, 25], "spaw": [17, 18, 21], "demonstr": [17, 18, 19, 20, 21, 22, 23, 27, 28, 29], "snippet": [17, 20, 23], "appear": 17, "mislead": 17, "sight": 17, "becaus": [17, 20, 27], "feel": 17, "free": 17, "try": [17, 22, 24], "augment": 17, "mirror": 17, "rotat": [17, 29], "crop": 17, "instanc": [17, 22], "advantag": 17, "li": [17, 22], "flip": 17, "compact": 17, "hand": 17, "lose": 17, "fewer": 17, "imagin": 17, "ghost": 17, "holder": 17, "design": [17, 25], "counterpart": 17, "translat": [17, 20, 29], "matter": [17, 22], "confirm": 17, "upside_down_methanol": 17, "m\u00fcller": 17, "jan": 17, "gr": 17, "\u00e9": 17, "goir": 17, "katja": 17, "hansen": 17, "siamac": 17, "fazli": 17, "franziska": 17, "biegler": 17, "andrea": 17, "zieh": 17, "\u00fc": 17, "ller": 17, "pereira": 17, "burg": 17, "bottou": 17, "q": [17, 18], "weinberg": 17, "editor": 17, "440": 17, "448": 17, "curran": 17, "associ": [17, 25], "inc": 17, "paper": 17, "cc": 17, "4830": 17, "pdf": 17, "view": [18, 24], "logic": 18, "uniform": [18, 22], "relat": 18, "_": [18, 21, 22], "bg": 18, "2v": 18, "foral": 18, "esm": 18, "bulk": [18, 19, 20, 21, 22, 23, 29], "nacl": [18, 20, 21, 23], "rocksalt": [18, 20, 21, 23], "64": [18, 20, 21, 23], "nacl_ewald": 18, "046": [18, 21], "fe": [18, 21, 29], "bcc": [18, 21, 29], "856": [18, 21], "ewald_matric": 18, "easiest": 18, "tighter": 18, "criteria": 18, "ewald_1": 18, "ewald_2": 18, "ewald_3": 18, "em": 18, "ems_out": 18, "total_energi": 18, "ev": [18, 25], "1e10": 18, "math": [18, 23], "epsilon_0": 18, "As": [19, 22, 24, 25], "suggest": 19, "out": [19, 21, 22, 23, 29], "tricki": 19, "closer": [19, 22], "spatial": [19, 22], "care": 19, "mix": 19, "matplotlib": [19, 20, 21, 23, 24, 25], "pyplot": [19, 20, 21, 23, 24, 25], "mpl": [19, 20, 21], "mbtr_water": [19, 20], "analys": 19, "111": [19, 24], "bridg": 19, "hcp": 19, "fcc111": [19, 24], "add_adsorb": 19, "slab_pur": 19, "vacuum": [19, 24, 29], "slab_ad": 19, "ontop": 19, "ontop_po": 19, "get_posit": [19, 24], "bridge_po": 19, "hcp_po": 19, "fcc_po": 19, "200": [19, 20, 23, 25, 29], "plot": [19, 20, 21, 22, 23, 24, 25], "reveal": 19, "pattern": 19, "aluminum": [19, 21], "al_slic": 19, "linspac": [19, 20, 21, 23, 24, 25], "label": [19, 20, 24, 25], "xlabel": [19, 25], "\u00e5": [19, 21, 24, 25], "legend": [19, 20, 23, 24, 25], "show": [19, 20, 21, 23, 24, 25], "adsoprt": 19, "tune": [19, 22], "classifi": 19, "motif": 20, "especi": [20, 22, 28], "g_k": 20, "chain": 20, "scalar": 20, "estim": 20, "illustr": [20, 21], "noteworthi": 20, "brief": 20, "summari": 20, "perimet": 20, "triangl": 20, "difficult": 20, "overcom": 20, "retriev": [20, 22], "ho_loc": [20, 22], "na": [20, 23], "cl": [20, 23], "01": 20, "mbtr_output": [20, 23], "n_element": [20, 23], "fig": [20, 21, 23, 24, 25], "ax": [20, 21, 23, 24, 25], "subplot": [20, 21, 23, 24, 25], "i_speci": [20, 23], "j_speci": [20, 23], "loc": [20, 23], "set_xlabel": [20, 21, 23, 24, 25], "graph": [20, 23], "due": [20, 22, 23, 27], "small": [20, 22], "benefit": [20, 27], "larger": [20, 29], "help": [20, 22, 28], "come": 20, "far": [20, 22], "meaning": [20, 22, 24, 29], "desc": [20, 26], "c60": 20, "output_no_weight": 20, "output_weight": 20, "awai": [20, 22], "intens": 20, "domin": [20, 22], "preprocess": [20, 24, 25, 26], "lear": 20, "benefici": 20, "what": [20, 25], "ultim": 20, "whole": [20, 25, 26], "fashion": 20, "know": [20, 25, 29], "stop": [20, 25], "repetit": 20, "02": 20, "a1": 20, "solv": 20, "formal": [20, 22], "fact": 20, "band": 20, "gap": 20, "per": [20, 24], "a2": 20, "a3": 20, "a4": 20, "cubic": [20, 21, 22, 29], "convent": 20, "2x2": 20, "recov": 20, "truli": 20, "normalis": 20, "l2_each": 20, "tripl": 20, "practic": [20, 22], "haoyan": 20, "huo": 20, "unifi": 20, "arxiv": [20, 23, 26], "1704": 20, "06439": 20, "apr": 20, "2017": 20, "captur": 21, "cdot": [21, 22, 25], "hat": [21, 25], "_k": 21, "infinit": 21, "sm": 21, "nacl_sin": 21, "sine_matric": 21, "mpl_toolkit": 21, "axes_grid1": 21, "make_axes_locat": 21, "ix": 21, "enumer": [21, 25], "i_atom": 21, "i_si": 21, "i_sm": 21, "maxval": 21, "figsiz": [21, 24, 25], "clip": 21, "a_min": 21, "a_max": 21, "c1": 21, "contourf": 21, "level": 21, "500": [21, 25], "contour": 21, "linewidth": [21, 25], "the_divid": 21, "color_axi": 21, "append_ax": 21, "cbar": 21, "colorbar": 21, "cax": 21, "tick": 21, "set_ylabel": [21, 24, 25], "tight_layout": [21, 24], "figur": [21, 29], "perfectli": 21, "115": 21, "16": [21, 22, 25], "1094": 21, "1101": 21, "expans": 22, "smear": 22, "2l": 22, "l_": 22, "z_": 22, "product": [22, 25], "iiint_": 22, "y_": 22, "theta": 22, "rho": 22, "freedom": 22, "trivial": 22, "By": 22, "definit": 22, "span": 22, "imaginari": 22, "natur": 22, "computation": 22, "easier": 22, "algebra": [22, 27], "xi": 22, "noth": 22, "prevent": [22, 25], "counter": 22, "chi": 22, "soap_wat": 22, "easi": [22, 26, 29], "small_soap": 22, "big_soap": 22, "n_feat1": 22, "n_feat2": 22, "copper": [22, 24], "cu": [22, 24], "get_pbc": 22, "periodic_soap": 22, "29": 22, "soap_copp": 22, "lead": 22, "farther": 22, "shown": [22, 25], "integr": 22, "complic": [22, 25, 29], "consider": 22, "amplitud": 22, "approxim": 22, "variat": 22, "latter": 22, "sometim": 22, "even": [22, 24], "interv": 22, "smoothli": 22, "restrict": 22, "domain": [22, 25], "activ": [22, 25], "manual": 22, "sensibl": 22, "hh_loc": 22, "behind": 22, "enabl": 22, "preserv": 22, "average_soap": 22, "ch3oh": 22, "soap_methanol": 22, "h2o2": [22, 26], "soap_peroxid": 22, "peroxid": 22, "longer": [22, 25], "necessari": 22, "choic": [22, 25], "pdist": 22, "squareform": 22, "vstack": [22, 24], "seem": 22, "bart": [22, 26], "\u00f3": [22, 26], "\u00e1": [22, 26], "bor": [22, 26], "nyi": [22, 26], "13769": [22, 26], "\u00e4": 22, "condens": 22, "michael": 22, "f\u00e9lix": 22, "c8cp05921g": 22, "subclass": 23, "doesn": 23, "t": [23, 24, 25], "vo": 23, "public": 23, "delta": 23, "signifi": 23, "95": [23, 25], "co": 23, "76": 23, "180": 23, "vo_wat": 23, "plt": [23, 24, 25], "625": 23, "vo_nacl": 23, "comparison": [23, 26], "mbtr_nacl": 23, "k2": 23, "vo_output": 23, "sake": 23, "clariti": 23, "lengthen": 23, "mario": 23, "artem": 23, "novel": 23, "paradigm": 23, "acta": 23, "crystallographica": 23, "section": [23, 28], "crystallographi": 23, "66": 23, "507": 23, "517": 23, "2010": 23, "malth": 23, "bisbo": 23, "bj": 23, "\u00f8": 23, "rk": 23, "hammer": 23, "preprint": 23, "15222": 23, "unlabel": 24, "topmost": 24, "simplest": [24, 26], "goal": [24, 29], "categor": 24, "subset": 24, "ten": 24, "answer": 24, "opinion": 24, "bias": 24, "script": [24, 25], "597": 24, "12": [24, 25, 29], "scan": 24, "get_cel": 24, "top_z_scal": 24, "range_xi": 24, "meshgrid": 24, "positions_sc": 24, "ravel": 24, "positions_cart": 24, "cartesian_posit": 24, "disk": [24, 25, 27], "npy": [24, 25], "load": [24, 25, 27], "standardscal": [24, 25], "model_select": [24, 25], "train_test_split": [24, 25], "mean_absolute_error": [24, 25], "manifold": 24, "tsne": 24, "minibatchkmean": 24, "spectralclust": 24, "dbscan": 24, "listedcolormap": 24, "n_sampl": [24, 25], "n_cluster": 24, "random_st": [24, 25], "42": 24, "labels_": 24, "few": [24, 28], "examin": 24, "colour": [24, 29], "assign": 24, "get_cmap": 24, "viridi": 24, "scatter": [24, 25], "cmap": 24, "15": [24, 25], "legend_el": 24, "abl": [24, 29], "further": 24, "dinstinct": 24, "lennard": 25, "jone": 25, "pretti": 25, "again": [25, 26], "simplic": 25, "possibli": 25, "fulli": 25, "principl": [25, 29], "yet": 25, "nabla_": 25, "r_i": 25, "gradient": 25, "d_1": 25, "d_2": 25, "dot": 25, "x_i": 25, "y_i": 25, "vdot": 25, "mention": 25, "major": 25, "fastest": 25, "But": 25, "cours": 25, "loss": 25, "varianc": 25, "forces_and_energi": 25, "lj": 25, "lennardjon": 25, "traj": 25, "hh": 25, "set_calcul": 25, "epsilon": 25, "get_total_energi": 25, "get_forc": 25, "subplots_adjust": 25, "bottom": 25, "ylabel": 25, "dd_dr": 25, "pytorch": 25, "training_pytorch": 25, "kindli": 25, "training_tensorflow": 25, "torch": 25, "manual_se": 25, "d_numpi": 25, "e_numpi": 25, "f_numpi": 25, "dd_dr_numpi": 25, "r_numpi": 25, "n_train": 25, "idx": 25, "astyp": 25, "d_train_ful": 25, "e_train_ful": 25, "f_train_ful": 25, "r_train_ful": 25, "dd_dr_train_ful": 25, "scaler": 25, "d_whole": 25, "dd_dr_whole": 25, "scale_": 25, "mse": 25, "var_energy_train": 25, "var": 25, "var_force_train": 25, "subselect": 25, "earli": 25, "d_train": 25, "d_valid": 25, "e_train": 25, "e_valid": 25, "f_train": 25, "f_valid": 25, "dd_dr_train": 25, "dd_dr_valid": 25, "test_siz": 25, "Then": [25, 29], "ffnet": 25, "forward": 25, "hidden": 25, "layer": 25, "def": [25, 29], "n_hidden": 25, "n_out": 25, "super": 25, "linear1": 25, "normal_": 25, "std": 25, "linear2": 25, "energy_force_loss": 25, "e_pr": 25, "f_pred": 25, "energy_loss": 25, "force_loss": 25, "lr": 25, "batch": 25, "overfit": 25, "n_max_epoch": 25, "5000": 25, "batch_siz": 25, "patienc": 25, "i_wors": 25, "old_valid_loss": 25, "inf": 25, "best_valid_loss": 25, "requires_grad": 25, "epoch": 25, "i_epoch": 25, "randperm": 25, "d_train_batch": 25, "e_train_batch": 25, "f_train_batch": 25, "dd_dr_train_batch": 25, "e_train_pred_batch": 25, "autograd": 25, "grad": 25, "create_graph": 25, "popul": 25, "affect": [25, 29], "fine": 25, "df_dd_train_batch": 25, "grad_output": 25, "ones_lik": 25, "f_train_pred_batch": 25, "einsum": 25, "ijkl": 25, "il": 25, "ijk": 25, "backward": 25, "zero_": 25, "zero_grad": 25, "criterion": 25, "e_valid_pr": 25, "df_dd_valid": 25, "f_valid_pr": 25, "valid_loss": 25, "state_dict": 25, "best_model": 25, "pt": 25, "break": 25, "finish": 25, "thirti": 25, "enter": 25, "phase": [25, 29], "load_state_dict": 25, "eval": 25, "entir": [25, 26], "e_whol": 25, "f_whole": 25, "e_whole_pr": 25, "df_dd_whole": 25, "f_whole_pr": 25, "detach": 25, "assess": 25, "respons": 25, "produd": 25, "r_whole": 25, "argsort": 25, "f_x_whole_pr": 25, "f_x_whole": 25, "f_x_train_ful": 25, "ax1": 25, "ax2": 25, "sharex": 25, "linestyl": 25, "mae_energi": 25, "mae": 25, "horizontalalign": 25, "verticalalign": 25, "transax": 25, "mae_forc": 25, "marker": 25, "zorder": 25, "fontsiz": 25, "08": 25, "97": 25, "hspace": 25, "someth": 25, "strategi": 26, "insight": 26, "a_featur": 26, "b_featur": 26, "re_kernel": 26, "choos": 26, "rightarrow": 26, "infti": 26, "unstabl": 26, "1601": 26, "04077": 26, "ram": 27, "onward": 27, "save_npz": 27, "load_npz": 27, "soap_featur": 27, "npz": 27, "confus": 27, "extern": 27, "mostli": 27, "routin": 27, "todens": 27, "tocsr": 27, "tocsc": 27, "csr": 27, "csc": 27, "suppport": 27, "acquaint": 28, "concept": 28, "great": 28, "briefli": 28, "signatur": 28, "life": 28, "ml": 28, "quantifi": 28, "rough": 29, "fairli": 29, "scenario": 29, "alreadi": 29, "known": 29, "landmark": 29, "opac": 29, "outlin": 29, "iron": 29, "n_z": 29, "n_xy_bcc": 29, "a_bcc": 29, "866": 29, "a_fcc": 29, "5825": 29, "n_xy_fcc": 29, "priori": 29, "bcc_featur": 29, "fcc_featur": 29, "next": 29, "grain": 29, "bit": 29, "rattl": 29, "linalg": 29, "dist_max": 29, "combined_featur": 29, "fcc_metric": 29, "bcc_metric": 29, "blue": 29, "red": 29, "png": 29, "90x": 29, "20y": 29, "20x": 29, "show_unit_cel": 29, "maxwidth": 29, "2000": 29, "clearli": 29, "imperfect": 29}, "objects": {"": [[5, 0, 0, "-", "dscribe"]], "dscribe": [[6, 0, 0, "-", "core"], [7, 0, 0, "-", "descriptors"], [5, 0, 0, "-", "ext"], [8, 0, 0, "-", "kernels"], [9, 0, 0, "-", "utils"]], "dscribe.core": [[6, 0, 0, "-", "lattice"], [6, 0, 0, "-", "system"]], "dscribe.core.lattice": [[6, 1, 1, "", "Lattice"]], "dscribe.core.lattice.Lattice": [[6, 2, 1, "", "abc"], [6, 3, 1, "", "get_cartesian_coords"], [6, 3, 1, "", "get_fractional_coords"], [6, 3, 1, "", "get_points_in_sphere"], [6, 2, 1, "", "inv_matrix"], [6, 2, 1, "", "lengths"], [6, 2, 1, "", "matrix"], [6, 2, 1, "", "reciprocal_lattice"], [6, 2, 1, "", "reciprocal_lattice_crystallographic"]], "dscribe.core.system": [[6, 1, 1, "", "System"]], "dscribe.core.system.System": [[6, 3, 1, "", "from_atoms"], [6, 3, 1, "", "get_cell_inverse"], [6, 3, 1, "", "get_displacement_tensor"], [6, 3, 1, "", "get_distance_matrix"], [6, 3, 1, "", "get_distance_matrix_within_radius"], [6, 3, 1, "", "get_inverse_distance_matrix"], [6, 3, 1, "", "set_cell"], [6, 3, 1, "", "set_pbc"], [6, 3, 1, "", "set_positions"], [6, 3, 1, "", "set_scaled_positions"], [6, 3, 1, "", "to_cartesian"], [6, 3, 1, "", "to_scaled"]], "dscribe.descriptors": [[7, 0, 0, "-", "acsf"], [7, 0, 0, "-", "coulombmatrix"], [7, 0, 0, "-", "descriptor"], [7, 0, 0, "-", "descriptorglobal"], [7, 0, 0, "-", "descriptorlocal"], [7, 0, 0, "-", "descriptormatrix"], [7, 0, 0, "-", "ewaldsummatrix"], [7, 0, 0, "-", "lmbtr"], [7, 0, 0, "-", "mbtr"], [7, 0, 0, "-", "sinematrix"], [7, 0, 0, "-", "soap"], [7, 0, 0, "-", "valleoganov"]], "dscribe.descriptors.acsf": [[7, 1, 1, "", "ACSF"]], "dscribe.descriptors.acsf.ACSF": [[16, 3, 1, "", "__init__"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_single"], [7, 2, 1, "", "g2_params"], [7, 2, 1, "", "g3_params"], [7, 2, 1, "", "g4_params"], [7, 2, 1, "", "g5_params"], [7, 3, 1, "", "get_number_of_features"], [7, 2, 1, "", "r_cut"], [7, 2, 1, "", "species"], [7, 3, 1, "", "validate_derivatives_method"]], "dscribe.descriptors.coulombmatrix": [[7, 1, 1, "", "CoulombMatrix"]], "dscribe.descriptors.coulombmatrix.CoulombMatrix": [[17, 3, 1, "", "__init__"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_single"], [7, 3, 1, "", "derivatives_numerical"]], "dscribe.descriptors.descriptor": [[7, 1, 1, "", "Descriptor"]], "dscribe.descriptors.descriptor.Descriptor": [[7, 3, 1, "", "check_atomic_numbers"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_parallel"], [7, 3, 1, "", "derivatives_parallel"], [7, 3, 1, "", "format_array"], [7, 3, 1, "", "get_number_of_features"], [7, 2, 1, "", "periodic"], [7, 2, 1, "", "sparse"], [7, 3, 1, "", "validate_derivatives_method"]], "dscribe.descriptors.descriptorglobal": [[7, 1, 1, "", "DescriptorGlobal"]], "dscribe.descriptors.descriptorglobal.DescriptorGlobal": [[7, 3, 1, "", "derivatives"], [7, 3, 1, "", "derivatives_numerical"], [7, 3, 1, "", "derivatives_single"]], "dscribe.descriptors.descriptorlocal": [[7, 1, 1, "", "DescriptorLocal"]], "dscribe.descriptors.descriptorlocal.DescriptorLocal": [[7, 3, 1, "", "derivatives"], [7, 3, 1, "", "derivatives_numerical"], [7, 3, 1, "", "derivatives_single"], [7, 3, 1, "", "init_derivatives_array"], [7, 3, 1, "", "init_descriptor_array"], [7, 3, 1, "", "validate_derivatives_method"]], "dscribe.descriptors.descriptormatrix": [[7, 1, 1, "", "DescriptorMatrix"]], "dscribe.descriptors.descriptormatrix.DescriptorMatrix": [[7, 3, 1, "", "create_single"], [7, 3, 1, "", "get_eigenspectrum"], [7, 3, 1, "", "get_matrix"], [7, 3, 1, "", "get_number_of_features"], [7, 3, 1, "", "sort"], [7, 3, 1, "", "sort_randomly"], [7, 3, 1, "", "unflatten"], [7, 3, 1, "", "zero_pad"]], "dscribe.descriptors.ewaldsummatrix": [[7, 1, 1, "", "EwaldSumMatrix"]], "dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix": [[18, 3, 1, "", "__init__"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_single"], [7, 3, 1, "", "get_matrix"]], "dscribe.descriptors.lmbtr": [[7, 1, 1, "", "LMBTR"]], "dscribe.descriptors.lmbtr.LMBTR": [[19, 3, 1, "", "__init__"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_single"], [7, 2, 1, "", "geometry"], [7, 3, 1, "", "get_location"], [7, 3, 1, "", "get_number_of_features"], [7, 2, 1, "", "grid"], [7, 2, 1, "", "normalization"], [7, 2, 1, "", "species"], [7, 2, 1, "", "weighting"]], "dscribe.descriptors.mbtr": [[7, 1, 1, "", "MBTR"], [7, 4, 1, "", "check_geometry"], [7, 4, 1, "", "check_grid"], [7, 4, 1, "", "check_weighting"]], "dscribe.descriptors.mbtr.MBTR": [[20, 3, 1, "", "__init__"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_single"], [7, 3, 1, "", "derivatives_analytical"], [7, 2, 1, "", "geometry"], [7, 3, 1, "", "get_location"], [7, 3, 1, "", "get_number_of_features"], [7, 2, 1, "", "grid"], [7, 2, 1, "", "normalization"], [7, 2, 1, "", "species"], [7, 3, 1, "", "validate_derivatives_method"], [7, 2, 1, "", "weighting"]], "dscribe.descriptors.sinematrix": [[7, 1, 1, "", "SineMatrix"]], "dscribe.descriptors.sinematrix.SineMatrix": [[21, 3, 1, "", "__init__"], [7, 3, 1, "", "create"], [7, 3, 1, "", "get_matrix"]], "dscribe.descriptors.soap": [[7, 1, 1, "", "SOAP"]], "dscribe.descriptors.soap.SOAP": [[22, 3, 1, "", "__init__"], [7, 2, 1, "", "compression"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_single"], [7, 3, 1, "", "derivatives_analytical"], [7, 3, 1, "", "derivatives_numerical"], [7, 3, 1, "", "get_basis_gto"], [7, 3, 1, "", "get_basis_poly"], [7, 3, 1, "", "get_cutoff_padding"], [7, 3, 1, "", "get_location"], [7, 3, 1, "", "get_number_of_features"], [7, 3, 1, "", "init_internal_array"], [7, 3, 1, "", "init_internal_dev_array"], [7, 3, 1, "", "prepare_centers"], [7, 2, 1, "", "species"], [7, 3, 1, "", "validate_derivatives_method"]], "dscribe.descriptors.valleoganov": [[7, 1, 1, "", "ValleOganov"]], "dscribe.descriptors.valleoganov.ValleOganov": [[23, 3, 1, "", "__init__"]], "dscribe.ext": [[5, 1, 1, "", "ACSFWrapper"], [5, 1, 1, "", "CellList"], [5, 1, 1, "", "CellListResult"], [5, 1, 1, "", "CoulombMatrix"], [5, 1, 1, "", "ExtendedSystem"], [5, 1, 1, "", "MBTRWrapper"], [5, 1, 1, "", "SOAPGTO"], [5, 1, 1, "", "SOAPPolynomial"], [5, 4, 1, "", "extend_system"]], "dscribe.ext.ACSFWrapper": [[5, 2, 1, "", "atomic_numbers"], [5, 3, 1, "", "create"], [5, 2, 1, "", "g3_params"], [5, 2, 1, "", "g4_params"], [5, 2, 1, "", "g5_params"], [5, 3, 1, "", "get_g2_params"], [5, 2, 1, "", "n_g2"], [5, 2, 1, "", "n_g3"], [5, 2, 1, "", "n_g4"], [5, 2, 1, "", "n_g5"], [5, 2, 1, "", "n_type_pairs"], [5, 2, 1, "", "n_types"], [5, 2, 1, "", "r_cut"], [5, 3, 1, "", "set_g2_params"]], "dscribe.ext.CellList": [[5, 3, 1, "", "get_neighbours_for_index"], [5, 3, 1, "", "get_neighbours_for_position"]], "dscribe.ext.CellListResult": [[5, 2, 1, "", "distances"], [5, 2, 1, "", "distances_squared"], [5, 2, 1, "", "indices"]], "dscribe.ext.CoulombMatrix": [[5, 3, 1, "", "create"], [5, 3, 1, "", "derivatives_numerical"]], "dscribe.ext.ExtendedSystem": [[5, 2, 1, "", "atomic_numbers"], [5, 2, 1, "", "indices"], [5, 2, 1, "", "positions"]], "dscribe.ext.MBTRWrapper": [[5, 3, 1, "", "get_k1"], [5, 3, 1, "", "get_k2"], [5, 3, 1, "", "get_k2_local"], [5, 3, 1, "", "get_k3"], [5, 3, 1, "", "get_k3_local"]], "dscribe.ext.SOAPGTO": [[5, 3, 1, "", "create"], [5, 3, 1, "", "derivatives_analytical"], [5, 3, 1, "", "derivatives_numerical"]], "dscribe.ext.SOAPPolynomial": [[5, 3, 1, "", "create"], [5, 3, 1, "", "derivatives_numerical"]], "dscribe.kernels": [[8, 0, 0, "-", "averagekernel"], [8, 0, 0, "-", "localsimilaritykernel"], [8, 0, 0, "-", "rematchkernel"]], "dscribe.kernels.averagekernel": [[8, 1, 1, "", "AverageKernel"]], "dscribe.kernels.averagekernel.AverageKernel": [[8, 3, 1, "", "get_global_similarity"]], "dscribe.kernels.localsimilaritykernel": [[8, 1, 1, "", "LocalSimilarityKernel"]], "dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel": [[8, 3, 1, "", "create"], [8, 3, 1, "", "get_global_similarity"], [8, 3, 1, "", "get_pairwise_matrix"]], "dscribe.kernels.rematchkernel": [[8, 1, 1, "", "REMatchKernel"]], "dscribe.kernels.rematchkernel.REMatchKernel": [[8, 3, 1, "", "get_global_similarity"]], "dscribe.utils": [[9, 0, 0, "-", "dimensionality"], [9, 0, 0, "-", "geometry"], [9, 0, 0, "-", "species"], [9, 0, 0, "-", "stats"]], "dscribe.utils.dimensionality": [[9, 4, 1, "", "is1d"], [9, 4, 1, "", "is2d"]], "dscribe.utils.geometry": [[9, 4, 1, "", "get_adjacency_list"], [9, 4, 1, "", "get_adjacency_matrix"], [9, 4, 1, "", "get_extended_system"]], "dscribe.utils.species": [[9, 4, 1, "", "get_atomic_numbers"], [9, 4, 1, "", "symbols_to_numbers"]], "dscribe.utils.stats": [[9, 4, 1, "", "system_stats"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:property", "3": "py:method", "4": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "property", "Python property"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"]}, "titleterms": {"about": 0, "author": 0, "contact": 0, "licens": 0, "fund": 0, "api": 1, "changelog": 2, "cite": 3, "dscribe": [3, 5, 6, 7, 8, 9, 10, 11], "contribut": 4, "code": 4, "style": 4, "guidelin": 4, "packag": [5, 6, 7, 8, 9], "subpackag": 5, "submodul": [5, 6, 7, 8, 9], "ext": 5, "modul": [5, 6, 7, 8, 9], "content": [5, 6, 7, 8, 9], "core": 6, "lattic": 6, "system": [6, 17, 20, 22, 29], "descriptor": [7, 23, 28, 29], "acsf": 7, "coulombmatrix": 7, "descriptorglob": 7, "descriptorloc": 7, "descriptormatrix": 7, "ewaldsummatrix": 7, "lmbtr": 7, "mbtr": [7, 23], "sinematrix": 7, "soap": 7, "valleoganov": 7, "kernel": [8, 26], "averagekernel": 8, "localsimilaritykernel": 8, "rematchkernel": 8, "util": 9, "dimension": 9, "geometri": [9, 20], "speci": 9, "stat": 9, "capabl": 11, "glanc": 11, "go": 11, "deeper": 11, "instal": 12, "pip": 12, "conda": 12, "from": [12, 26], "sourc": 12, "common": 12, "issu": 12, "public": 13, "2020": 13, "2019": 13, "basic": [14, 28], "concept": 14, "terminologi": 14, "typic": 14, "workflow": 14, "deriv": 15, "call": 15, "signatur": 15, "layout": 15, "atom": [16, 22], "center": 16, "symmetri": 16, "function": [16, 20], "setup": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "creation": [16, 17, 18, 19, 20, 21, 22, 23], "coulomb": 17, "matrix": [17, 18, 21], "exampl": [17, 18, 19, 20, 21, 22, 23], "flatten": 17, "option": 17, "permut": 17, "zero": 17, "pad": 17, "Not": 17, "meant": 17, "period": [17, 20, 21, 22], "invari": 17, "ewald": 18, "sum": 18, "accuraci": 18, "total": 18, "electrostat": 18, "energi": 18, "local": [19, 26, 29], "mani": [19, 20], "bodi": [19, 20], "tensor": [19, 20], "represent": [19, 20], "adsorpt": 19, "site": 19, "analysi": [19, 24, 25, 28], "The": 20, "weight": [20, 22], "locat": [20, 22], "inform": [20, 22], "visual": [20, 23, 28, 29], "finit": [20, 22], "normal": 20, "sine": 21, "interact": 21, "crystal": 21, "smooth": 22, "overlap": 22, "posit": 22, "spars": [22, 27], "output": [22, 23, 27], "averag": [22, 26], "vall": 23, "oganov": 23, "class": 23, "side": 23, "unsupervis": 24, "learn": [24, 25, 28], "cluster": 24, "dataset": [24, 25], "gener": [24, 25], "train": [24, 25], "supervis": 25, "an": 25, "ml": 25, "forc": 25, "field": 25, "build": 26, "similar": [26, 28], "environ": [26, 29], "rematch": 26, "persist": 27, "convers": 27, "tutori": 28, "machin": 28, "chemic": 29, "refer": 29, "final": 29, "color": 29}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "sphinxcontrib.bibtex": 9, "sphinx": 57}, "alltitles": {"About": [[0, "about"]], "Authors": [[0, "authors"]], "Contact": [[0, "contact"]], "License": [[0, "license"]], "Funding": [[0, "funding"]], "API": [[1, "api"]], "Changelog": [[2, "changelog"]], "Citing DScribe": [[3, "citing-dscribe"]], "Contributing": [[4, "contributing"]], "Code style guideline": [[4, "code-style-guideline"]], "dscribe package": [[5, "dscribe-package"]], "Subpackages": [[5, "subpackages"]], "Submodules": [[5, "submodules"], [6, "submodules"], [7, "submodules"], [8, "submodules"], [9, "submodules"]], "dscribe.ext module": [[5, "module-dscribe.ext"]], "Module contents": [[5, "module-dscribe"], [6, "module-dscribe.core"], [7, "module-dscribe.descriptors"], [8, "module-dscribe.kernels"], [9, "module-dscribe.utils"]], "dscribe.core package": [[6, "dscribe-core-package"]], "dscribe.core.lattice module": [[6, "module-dscribe.core.lattice"]], "dscribe.core.system module": [[6, "module-dscribe.core.system"]], "dscribe.descriptors package": [[7, "dscribe-descriptors-package"]], "dscribe.descriptors.acsf module": [[7, "module-dscribe.descriptors.acsf"]], "dscribe.descriptors.coulombmatrix module": [[7, "module-dscribe.descriptors.coulombmatrix"]], "dscribe.descriptors.descriptor module": [[7, "module-dscribe.descriptors.descriptor"]], "dscribe.descriptors.descriptorglobal module": [[7, "module-dscribe.descriptors.descriptorglobal"]], "dscribe.descriptors.descriptorlocal module": [[7, "module-dscribe.descriptors.descriptorlocal"]], "dscribe.descriptors.descriptormatrix module": [[7, "module-dscribe.descriptors.descriptormatrix"]], "dscribe.descriptors.ewaldsummatrix module": [[7, "module-dscribe.descriptors.ewaldsummatrix"]], "dscribe.descriptors.lmbtr module": [[7, "module-dscribe.descriptors.lmbtr"]], "dscribe.descriptors.mbtr module": [[7, "module-dscribe.descriptors.mbtr"]], "dscribe.descriptors.sinematrix module": [[7, "module-dscribe.descriptors.sinematrix"]], "dscribe.descriptors.soap module": [[7, "module-dscribe.descriptors.soap"]], "dscribe.descriptors.valleoganov module": [[7, "module-dscribe.descriptors.valleoganov"]], "dscribe.kernels package": [[8, "dscribe-kernels-package"]], "dscribe.kernels.averagekernel module": [[8, "module-dscribe.kernels.averagekernel"]], "dscribe.kernels.localsimilaritykernel module": [[8, "module-dscribe.kernels.localsimilaritykernel"]], "dscribe.kernels.rematchkernel module": [[8, "module-dscribe.kernels.rematchkernel"]], "dscribe.utils package": [[9, "dscribe-utils-package"]], "dscribe.utils.dimensionality module": [[9, "module-dscribe.utils.dimensionality"]], "dscribe.utils.geometry module": [[9, "module-dscribe.utils.geometry"]], "dscribe.utils.species module": [[9, "module-dscribe.utils.species"]], "dscribe.utils.stats module": [[9, "module-dscribe.utils.stats"]], "dscribe": [[10, "dscribe"]], "DScribe": [[11, "dscribe"]], "Capabilities at a Glance": [[11, "capabilities-at-a-glance"]], "Go Deeper": [[11, "go-deeper"]], "Installation": [[12, "installation"]], "pip": [[12, "pip"]], "conda": [[12, "conda"]], "From source": [[12, "from-source"]], "Common issues": [[12, "common-issues"]], "Publications": [[13, "publications"]], "2020": [[13, "id1"]], "2019": [[13, "id4"]], "Basic concepts": [[14, "basic-concepts"]], "Terminology": [[14, "terminology"]], "Typical workflow": [[14, "typical-workflow"]], "Derivatives": [[15, "derivatives"]], "Call signature": [[15, "call-signature"]], "Layout": [[15, "layout"]], "Atom-centered Symmetry Functions": [[16, "atom-centered-symmetry-functions"]], "Setup": [[16, "setup"], [17, "setup"], [18, "setup"], [19, "setup"], [20, "setup"], [21, "setup"], [22, "setup"], [23, "setup"], [24, "setup"], [25, "setup"]], "Creation": [[16, "creation"], [17, "creation"], [18, "creation"], [19, "creation"], [20, "creation"], [21, "creation"], [22, "creation"], [23, "creation"]], "Coulomb Matrix": [[17, "coulomb-matrix"]], "Examples": [[17, "examples"], [18, "examples"], [19, "examples"], [20, "examples"], [21, "examples"], [22, "examples"], [23, "examples"]], "Flattening": [[17, "flattening"]], "Options for permutation": [[17, "options-for-permutation"]], "Zero-padding": [[17, "zero-padding"]], "Not meant for periodic systems": [[17, "not-meant-for-periodic-systems"]], "Invariance": [[17, "invariance"]], "Ewald sum matrix": [[18, "ewald-sum-matrix"]], "Accuracy": [[18, "accuracy"]], "Total electrostatic energy": [[18, "total-electrostatic-energy"]], "Local Many-body Tensor Representation": [[19, "local-many-body-tensor-representation"]], "Adsorption site analysis": [[19, "adsorption-site-analysis"]], "Many-body Tensor Representation": [[20, "many-body-tensor-representation"]], "The geometry and weighting functions": [[20, "id17"]], "Locating information": [[20, "locating-information"], [22, "locating-information"]], "Visualization": [[20, "visualization"], [23, "visualization"], [28, "visualization"]], "Finite systems": [[20, "finite-systems"], [22, "finite-systems"]], "Normalization": [[20, "normalization"]], "Periodic systems": [[20, "periodic-systems"], [22, "periodic-systems"]], "Sine matrix": [[21, "sine-matrix"]], "Interaction in a periodic crystal": [[21, "interaction-in-a-periodic-crystal"]], "Smooth Overlap of Atomic Positions": [[22, "smooth-overlap-of-atomic-positions"]], "Weighting": [[22, "weighting"]], "Sparse output": [[22, "sparse-output"], [27, "sparse-output"]], "Average output": [[22, "average-output"]], "Valle-Oganov descriptor": [[23, "valle-oganov-descriptor"]], "Setup with MBTR class": [[23, "setup-with-mbtr-class"]], "Side by side with MBTR output": [[23, "side-by-side-with-mbtr-output"]], "Unsupervised Learning: Clustering": [[24, "unsupervised-learning-clustering"]], "Dataset generation": [[24, "dataset-generation"], [25, "dataset-generation"]], "Training": [[24, "training"], [25, "training"]], "Analysis": [[24, "analysis"], [25, "analysis"]], "Supervised Learning: Training an ML Force-field": [[25, "supervised-learning-training-an-ml-force-field"]], "Building similarity kernels from local environments": [[26, "building-similarity-kernels-from-local-environments"]], "Average kernel": [[26, "average-kernel"]], "REMatch kernel": [[26, "rematch-kernel"]], "Persistence": [[27, "persistence"]], "Conversion": [[27, "conversion"]], "Tutorials": [[28, "tutorials"]], "Basics": [[28, "basics"]], "Descriptors": [[28, "descriptors"]], "Machine Learning": [[28, "machine-learning"]], "Similarity Analysis": [[28, "similarity-analysis"]], "Chemical Environment Visualization with Local Descriptors": [[29, "chemical-environment-visualization-with-local-descriptors"]], "References and final system": [[29, "references-and-final-system"]], "Coloring": [[29, "coloring"]]}, "indexentries": {"acsfwrapper (class in dscribe.ext)": [[5, "dscribe.ext.ACSFWrapper"]], "celllist (class in dscribe.ext)": [[5, "dscribe.ext.CellList"]], "celllistresult (class in dscribe.ext)": [[5, "dscribe.ext.CellListResult"]], "coulombmatrix (class in dscribe.ext)": [[5, "dscribe.ext.CoulombMatrix"]], "extendedsystem (class in dscribe.ext)": [[5, "dscribe.ext.ExtendedSystem"]], "mbtrwrapper (class in dscribe.ext)": [[5, "dscribe.ext.MBTRWrapper"]], "soapgto (class in dscribe.ext)": [[5, "dscribe.ext.SOAPGTO"]], "soappolynomial (class in dscribe.ext)": [[5, "dscribe.ext.SOAPPolynomial"]], "atomic_numbers (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.atomic_numbers"]], "atomic_numbers (dscribe.ext.extendedsystem property)": [[5, "dscribe.ext.ExtendedSystem.atomic_numbers"]], "create() (dscribe.ext.acsfwrapper method)": [[5, "dscribe.ext.ACSFWrapper.create"]], "create() (dscribe.ext.coulombmatrix method)": [[5, "dscribe.ext.CoulombMatrix.create"]], "create() (dscribe.ext.soapgto method)": [[5, "dscribe.ext.SOAPGTO.create"]], "create() (dscribe.ext.soappolynomial method)": [[5, "dscribe.ext.SOAPPolynomial.create"]], "derivatives_analytical() (dscribe.ext.soapgto method)": [[5, "dscribe.ext.SOAPGTO.derivatives_analytical"]], "derivatives_numerical() (dscribe.ext.coulombmatrix method)": [[5, "dscribe.ext.CoulombMatrix.derivatives_numerical"]], "derivatives_numerical() (dscribe.ext.soapgto method)": [[5, "dscribe.ext.SOAPGTO.derivatives_numerical"]], "derivatives_numerical() (dscribe.ext.soappolynomial method)": [[5, "dscribe.ext.SOAPPolynomial.derivatives_numerical"]], "distances (dscribe.ext.celllistresult property)": [[5, "dscribe.ext.CellListResult.distances"]], "distances_squared (dscribe.ext.celllistresult property)": [[5, "dscribe.ext.CellListResult.distances_squared"]], "dscribe": [[5, "module-dscribe"]], "dscribe.ext": [[5, "module-dscribe.ext"]], "extend_system() (in module dscribe.ext)": [[5, "dscribe.ext.extend_system"]], "g3_params (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.g3_params"]], "g4_params (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.g4_params"]], "g5_params (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.g5_params"]], "get_g2_params() (dscribe.ext.acsfwrapper method)": [[5, "dscribe.ext.ACSFWrapper.get_g2_params"]], "get_k1() (dscribe.ext.mbtrwrapper method)": [[5, "dscribe.ext.MBTRWrapper.get_k1"]], "get_k2() (dscribe.ext.mbtrwrapper method)": [[5, "dscribe.ext.MBTRWrapper.get_k2"]], "get_k2_local() (dscribe.ext.mbtrwrapper method)": [[5, "dscribe.ext.MBTRWrapper.get_k2_local"]], "get_k3() (dscribe.ext.mbtrwrapper method)": [[5, "dscribe.ext.MBTRWrapper.get_k3"]], "get_k3_local() (dscribe.ext.mbtrwrapper method)": [[5, "dscribe.ext.MBTRWrapper.get_k3_local"]], "get_neighbours_for_index() (dscribe.ext.celllist method)": [[5, "dscribe.ext.CellList.get_neighbours_for_index"]], "get_neighbours_for_position() (dscribe.ext.celllist method)": [[5, "dscribe.ext.CellList.get_neighbours_for_position"]], "indices (dscribe.ext.celllistresult property)": [[5, "dscribe.ext.CellListResult.indices"]], "indices (dscribe.ext.extendedsystem property)": [[5, "dscribe.ext.ExtendedSystem.indices"]], "module": [[5, "module-dscribe"], [5, "module-dscribe.ext"], [6, "module-dscribe.core"], [6, "module-dscribe.core.lattice"], [6, "module-dscribe.core.system"], [7, "module-dscribe.descriptors"], [7, "module-dscribe.descriptors.acsf"], [7, "module-dscribe.descriptors.coulombmatrix"], [7, "module-dscribe.descriptors.descriptor"], [7, "module-dscribe.descriptors.descriptorglobal"], [7, "module-dscribe.descriptors.descriptorlocal"], [7, "module-dscribe.descriptors.descriptormatrix"], [7, "module-dscribe.descriptors.ewaldsummatrix"], [7, "module-dscribe.descriptors.lmbtr"], [7, "module-dscribe.descriptors.mbtr"], [7, "module-dscribe.descriptors.sinematrix"], [7, "module-dscribe.descriptors.soap"], [7, "module-dscribe.descriptors.valleoganov"], [8, "module-dscribe.kernels"], [8, "module-dscribe.kernels.averagekernel"], [8, "module-dscribe.kernels.localsimilaritykernel"], [8, "module-dscribe.kernels.rematchkernel"], [9, "module-dscribe.utils"], [9, "module-dscribe.utils.dimensionality"], [9, "module-dscribe.utils.geometry"], [9, "module-dscribe.utils.species"], [9, "module-dscribe.utils.stats"]], "n_g2 (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.n_g2"]], "n_g3 (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.n_g3"]], "n_g4 (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.n_g4"]], "n_g5 (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.n_g5"]], "n_type_pairs (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.n_type_pairs"]], "n_types (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.n_types"]], "positions (dscribe.ext.extendedsystem property)": [[5, "dscribe.ext.ExtendedSystem.positions"]], "r_cut (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.r_cut"]], "set_g2_params() (dscribe.ext.acsfwrapper method)": [[5, "dscribe.ext.ACSFWrapper.set_g2_params"]], "lattice (class in dscribe.core.lattice)": [[6, "dscribe.core.lattice.Lattice"]], "system (class in dscribe.core.system)": [[6, "dscribe.core.system.System"]], "abc (dscribe.core.lattice.lattice property)": [[6, "dscribe.core.lattice.Lattice.abc"]], "dscribe.core": [[6, "module-dscribe.core"]], "dscribe.core.lattice": [[6, "module-dscribe.core.lattice"]], "dscribe.core.system": [[6, "module-dscribe.core.system"]], "from_atoms() (dscribe.core.system.system static method)": [[6, "dscribe.core.system.System.from_atoms"]], "get_cartesian_coords() (dscribe.core.lattice.lattice method)": [[6, "dscribe.core.lattice.Lattice.get_cartesian_coords"]], "get_cell_inverse() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.get_cell_inverse"]], "get_displacement_tensor() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.get_displacement_tensor"]], "get_distance_matrix() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.get_distance_matrix"]], "get_distance_matrix_within_radius() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.get_distance_matrix_within_radius"]], "get_fractional_coords() (dscribe.core.lattice.lattice method)": [[6, "dscribe.core.lattice.Lattice.get_fractional_coords"]], "get_inverse_distance_matrix() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.get_inverse_distance_matrix"]], "get_points_in_sphere() (dscribe.core.lattice.lattice method)": [[6, "dscribe.core.lattice.Lattice.get_points_in_sphere"]], "inv_matrix (dscribe.core.lattice.lattice property)": [[6, "dscribe.core.lattice.Lattice.inv_matrix"]], "lengths (dscribe.core.lattice.lattice property)": [[6, "dscribe.core.lattice.Lattice.lengths"]], "matrix (dscribe.core.lattice.lattice property)": [[6, "dscribe.core.lattice.Lattice.matrix"]], "reciprocal_lattice (dscribe.core.lattice.lattice property)": [[6, "dscribe.core.lattice.Lattice.reciprocal_lattice"]], "reciprocal_lattice_crystallographic (dscribe.core.lattice.lattice property)": [[6, "dscribe.core.lattice.Lattice.reciprocal_lattice_crystallographic"]], "set_cell() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.set_cell"]], "set_pbc() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.set_pbc"]], "set_positions() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.set_positions"]], "set_scaled_positions() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.set_scaled_positions"]], "to_cartesian() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.to_cartesian"]], "to_scaled() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.to_scaled"]], "acsf (class in dscribe.descriptors.acsf)": [[7, "dscribe.descriptors.acsf.ACSF"]], "coulombmatrix (class in dscribe.descriptors.coulombmatrix)": [[7, "dscribe.descriptors.coulombmatrix.CoulombMatrix"]], "descriptor (class in dscribe.descriptors.descriptor)": [[7, "dscribe.descriptors.descriptor.Descriptor"]], "descriptorglobal (class in dscribe.descriptors.descriptorglobal)": [[7, "dscribe.descriptors.descriptorglobal.DescriptorGlobal"]], "descriptorlocal (class in dscribe.descriptors.descriptorlocal)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal"]], "descriptormatrix (class in dscribe.descriptors.descriptormatrix)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix"]], "ewaldsummatrix (class in dscribe.descriptors.ewaldsummatrix)": [[7, "dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix"]], "lmbtr (class in dscribe.descriptors.lmbtr)": [[7, "dscribe.descriptors.lmbtr.LMBTR"]], "mbtr (class in dscribe.descriptors.mbtr)": [[7, "dscribe.descriptors.mbtr.MBTR"]], "soap (class in dscribe.descriptors.soap)": [[7, "dscribe.descriptors.soap.SOAP"]], "sinematrix (class in dscribe.descriptors.sinematrix)": [[7, "dscribe.descriptors.sinematrix.SineMatrix"]], "valleoganov (class in dscribe.descriptors.valleoganov)": [[7, "dscribe.descriptors.valleoganov.ValleOganov"]], "check_atomic_numbers() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.check_atomic_numbers"]], "check_geometry() (in module dscribe.descriptors.mbtr)": [[7, "dscribe.descriptors.mbtr.check_geometry"]], "check_grid() (in module dscribe.descriptors.mbtr)": [[7, "dscribe.descriptors.mbtr.check_grid"]], "check_weighting() (in module dscribe.descriptors.mbtr)": [[7, "dscribe.descriptors.mbtr.check_weighting"]], "compression (dscribe.descriptors.soap.soap property)": [[7, "dscribe.descriptors.soap.SOAP.compression"]], "create() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.create"]], "create() (dscribe.descriptors.coulombmatrix.coulombmatrix method)": [[7, "dscribe.descriptors.coulombmatrix.CoulombMatrix.create"]], "create() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.create"]], "create() (dscribe.descriptors.ewaldsummatrix.ewaldsummatrix method)": [[7, "dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix.create"]], "create() (dscribe.descriptors.lmbtr.lmbtr method)": [[7, "dscribe.descriptors.lmbtr.LMBTR.create"]], "create() (dscribe.descriptors.mbtr.mbtr method)": [[7, "dscribe.descriptors.mbtr.MBTR.create"]], "create() (dscribe.descriptors.sinematrix.sinematrix method)": [[7, "dscribe.descriptors.sinematrix.SineMatrix.create"]], "create() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.create"]], "create_parallel() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.create_parallel"]], "create_single() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.create_single"]], "create_single() (dscribe.descriptors.coulombmatrix.coulombmatrix method)": [[7, "dscribe.descriptors.coulombmatrix.CoulombMatrix.create_single"]], "create_single() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.create_single"]], "create_single() (dscribe.descriptors.ewaldsummatrix.ewaldsummatrix method)": [[7, "dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix.create_single"]], "create_single() (dscribe.descriptors.lmbtr.lmbtr method)": [[7, "dscribe.descriptors.lmbtr.LMBTR.create_single"]], "create_single() (dscribe.descriptors.mbtr.mbtr method)": [[7, "dscribe.descriptors.mbtr.MBTR.create_single"]], "create_single() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.create_single"]], "derivatives() (dscribe.descriptors.descriptorglobal.descriptorglobal method)": [[7, "dscribe.descriptors.descriptorglobal.DescriptorGlobal.derivatives"]], "derivatives() (dscribe.descriptors.descriptorlocal.descriptorlocal method)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal.derivatives"]], "derivatives_analytical() (dscribe.descriptors.mbtr.mbtr method)": [[7, "dscribe.descriptors.mbtr.MBTR.derivatives_analytical"]], "derivatives_analytical() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.derivatives_analytical"]], "derivatives_numerical() (dscribe.descriptors.coulombmatrix.coulombmatrix method)": [[7, "dscribe.descriptors.coulombmatrix.CoulombMatrix.derivatives_numerical"]], "derivatives_numerical() (dscribe.descriptors.descriptorglobal.descriptorglobal method)": [[7, "dscribe.descriptors.descriptorglobal.DescriptorGlobal.derivatives_numerical"]], "derivatives_numerical() (dscribe.descriptors.descriptorlocal.descriptorlocal method)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal.derivatives_numerical"]], "derivatives_numerical() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.derivatives_numerical"]], "derivatives_parallel() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.derivatives_parallel"]], "derivatives_single() (dscribe.descriptors.descriptorglobal.descriptorglobal method)": [[7, "dscribe.descriptors.descriptorglobal.DescriptorGlobal.derivatives_single"]], "derivatives_single() (dscribe.descriptors.descriptorlocal.descriptorlocal method)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal.derivatives_single"]], "dscribe.descriptors": [[7, "module-dscribe.descriptors"]], "dscribe.descriptors.acsf": [[7, "module-dscribe.descriptors.acsf"]], "dscribe.descriptors.coulombmatrix": [[7, "module-dscribe.descriptors.coulombmatrix"]], "dscribe.descriptors.descriptor": [[7, "module-dscribe.descriptors.descriptor"]], "dscribe.descriptors.descriptorglobal": [[7, "module-dscribe.descriptors.descriptorglobal"]], "dscribe.descriptors.descriptorlocal": [[7, "module-dscribe.descriptors.descriptorlocal"]], "dscribe.descriptors.descriptormatrix": [[7, "module-dscribe.descriptors.descriptormatrix"]], "dscribe.descriptors.ewaldsummatrix": [[7, "module-dscribe.descriptors.ewaldsummatrix"]], "dscribe.descriptors.lmbtr": [[7, "module-dscribe.descriptors.lmbtr"]], "dscribe.descriptors.mbtr": [[7, "module-dscribe.descriptors.mbtr"]], "dscribe.descriptors.sinematrix": [[7, "module-dscribe.descriptors.sinematrix"]], "dscribe.descriptors.soap": [[7, "module-dscribe.descriptors.soap"]], "dscribe.descriptors.valleoganov": [[7, "module-dscribe.descriptors.valleoganov"]], "format_array() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.format_array"]], "g2_params (dscribe.descriptors.acsf.acsf property)": [[7, "dscribe.descriptors.acsf.ACSF.g2_params"]], "g3_params (dscribe.descriptors.acsf.acsf property)": [[7, "dscribe.descriptors.acsf.ACSF.g3_params"]], "g4_params (dscribe.descriptors.acsf.acsf property)": [[7, "dscribe.descriptors.acsf.ACSF.g4_params"]], "g5_params (dscribe.descriptors.acsf.acsf property)": [[7, "dscribe.descriptors.acsf.ACSF.g5_params"]], "geometry (dscribe.descriptors.lmbtr.lmbtr property)": [[7, "dscribe.descriptors.lmbtr.LMBTR.geometry"]], "geometry (dscribe.descriptors.mbtr.mbtr property)": [[7, "dscribe.descriptors.mbtr.MBTR.geometry"]], "get_basis_gto() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.get_basis_gto"]], "get_basis_poly() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.get_basis_poly"]], "get_cutoff_padding() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.get_cutoff_padding"]], "get_eigenspectrum() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.get_eigenspectrum"]], "get_location() (dscribe.descriptors.lmbtr.lmbtr method)": [[7, "dscribe.descriptors.lmbtr.LMBTR.get_location"]], "get_location() (dscribe.descriptors.mbtr.mbtr method)": [[7, "dscribe.descriptors.mbtr.MBTR.get_location"]], "get_location() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.get_location"]], "get_matrix() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.get_matrix"]], "get_matrix() (dscribe.descriptors.ewaldsummatrix.ewaldsummatrix method)": [[7, "dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix.get_matrix"]], "get_matrix() (dscribe.descriptors.sinematrix.sinematrix method)": [[7, "dscribe.descriptors.sinematrix.SineMatrix.get_matrix"]], "get_number_of_features() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.get_number_of_features"]], "get_number_of_features() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.get_number_of_features"]], "get_number_of_features() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.get_number_of_features"]], "get_number_of_features() (dscribe.descriptors.lmbtr.lmbtr method)": [[7, "dscribe.descriptors.lmbtr.LMBTR.get_number_of_features"]], "get_number_of_features() (dscribe.descriptors.mbtr.mbtr method)": [[7, "dscribe.descriptors.mbtr.MBTR.get_number_of_features"]], "get_number_of_features() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.get_number_of_features"]], "grid (dscribe.descriptors.lmbtr.lmbtr property)": [[7, "dscribe.descriptors.lmbtr.LMBTR.grid"]], "grid (dscribe.descriptors.mbtr.mbtr property)": [[7, "dscribe.descriptors.mbtr.MBTR.grid"]], "init_derivatives_array() (dscribe.descriptors.descriptorlocal.descriptorlocal method)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal.init_derivatives_array"]], "init_descriptor_array() (dscribe.descriptors.descriptorlocal.descriptorlocal method)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal.init_descriptor_array"]], "init_internal_array() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.init_internal_array"]], "init_internal_dev_array() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.init_internal_dev_array"]], "normalization (dscribe.descriptors.lmbtr.lmbtr property)": [[7, "dscribe.descriptors.lmbtr.LMBTR.normalization"]], "normalization (dscribe.descriptors.mbtr.mbtr property)": [[7, "dscribe.descriptors.mbtr.MBTR.normalization"]], "periodic (dscribe.descriptors.descriptor.descriptor property)": [[7, "dscribe.descriptors.descriptor.Descriptor.periodic"]], "prepare_centers() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.prepare_centers"]], "r_cut (dscribe.descriptors.acsf.acsf property)": [[7, "dscribe.descriptors.acsf.ACSF.r_cut"]], "sort() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.sort"]], "sort_randomly() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.sort_randomly"]], "sparse (dscribe.descriptors.descriptor.descriptor property)": [[7, "dscribe.descriptors.descriptor.Descriptor.sparse"]], "species (dscribe.descriptors.acsf.acsf property)": [[7, "dscribe.descriptors.acsf.ACSF.species"]], "species (dscribe.descriptors.lmbtr.lmbtr property)": [[7, "dscribe.descriptors.lmbtr.LMBTR.species"]], "species (dscribe.descriptors.mbtr.mbtr property)": [[7, "dscribe.descriptors.mbtr.MBTR.species"]], "species (dscribe.descriptors.soap.soap property)": [[7, "dscribe.descriptors.soap.SOAP.species"]], "unflatten() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.unflatten"]], "validate_derivatives_method() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.validate_derivatives_method"]], "validate_derivatives_method() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.validate_derivatives_method"]], "validate_derivatives_method() (dscribe.descriptors.descriptorlocal.descriptorlocal method)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal.validate_derivatives_method"]], "validate_derivatives_method() (dscribe.descriptors.mbtr.mbtr method)": [[7, "dscribe.descriptors.mbtr.MBTR.validate_derivatives_method"]], "validate_derivatives_method() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.validate_derivatives_method"]], "weighting (dscribe.descriptors.lmbtr.lmbtr property)": [[7, "dscribe.descriptors.lmbtr.LMBTR.weighting"]], "weighting (dscribe.descriptors.mbtr.mbtr property)": [[7, "dscribe.descriptors.mbtr.MBTR.weighting"]], "zero_pad() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.zero_pad"]], "averagekernel (class in dscribe.kernels.averagekernel)": [[8, "dscribe.kernels.averagekernel.AverageKernel"]], "localsimilaritykernel (class in dscribe.kernels.localsimilaritykernel)": [[8, "dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel"]], "rematchkernel (class in dscribe.kernels.rematchkernel)": [[8, "dscribe.kernels.rematchkernel.REMatchKernel"]], "create() (dscribe.kernels.localsimilaritykernel.localsimilaritykernel method)": [[8, "dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel.create"]], "dscribe.kernels": [[8, "module-dscribe.kernels"]], "dscribe.kernels.averagekernel": [[8, "module-dscribe.kernels.averagekernel"]], "dscribe.kernels.localsimilaritykernel": [[8, "module-dscribe.kernels.localsimilaritykernel"]], "dscribe.kernels.rematchkernel": [[8, "module-dscribe.kernels.rematchkernel"]], "get_global_similarity() (dscribe.kernels.averagekernel.averagekernel method)": [[8, "dscribe.kernels.averagekernel.AverageKernel.get_global_similarity"]], "get_global_similarity() (dscribe.kernels.localsimilaritykernel.localsimilaritykernel method)": [[8, "dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel.get_global_similarity"]], "get_global_similarity() (dscribe.kernels.rematchkernel.rematchkernel method)": [[8, "dscribe.kernels.rematchkernel.REMatchKernel.get_global_similarity"]], "get_pairwise_matrix() (dscribe.kernels.localsimilaritykernel.localsimilaritykernel method)": [[8, "dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel.get_pairwise_matrix"]], "dscribe.utils": [[9, "module-dscribe.utils"]], "dscribe.utils.dimensionality": [[9, "module-dscribe.utils.dimensionality"]], "dscribe.utils.geometry": [[9, "module-dscribe.utils.geometry"]], "dscribe.utils.species": [[9, "module-dscribe.utils.species"]], "dscribe.utils.stats": [[9, "module-dscribe.utils.stats"]], "get_adjacency_list() (in module dscribe.utils.geometry)": [[9, "dscribe.utils.geometry.get_adjacency_list"]], "get_adjacency_matrix() (in module dscribe.utils.geometry)": [[9, "dscribe.utils.geometry.get_adjacency_matrix"]], "get_atomic_numbers() (in module dscribe.utils.species)": [[9, "dscribe.utils.species.get_atomic_numbers"]], "get_extended_system() (in module dscribe.utils.geometry)": [[9, "dscribe.utils.geometry.get_extended_system"]], "is1d() (in module dscribe.utils.dimensionality)": [[9, "dscribe.utils.dimensionality.is1d"]], "is2d() (in module dscribe.utils.dimensionality)": [[9, "dscribe.utils.dimensionality.is2d"]], "symbols_to_numbers() (in module dscribe.utils.species)": [[9, "dscribe.utils.species.symbols_to_numbers"]], "system_stats() (in module dscribe.utils.stats)": [[9, "dscribe.utils.stats.system_stats"]], "__init__() (dscribe.descriptors.acsf.acsf method)": [[16, "dscribe.descriptors.acsf.ACSF.__init__"]], "__init__() (dscribe.descriptors.coulombmatrix.coulombmatrix method)": [[17, "dscribe.descriptors.coulombmatrix.CoulombMatrix.__init__"]], "__init__() (dscribe.descriptors.ewaldsummatrix.ewaldsummatrix method)": [[18, "dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix.__init__"]], "__init__() (dscribe.descriptors.lmbtr.lmbtr method)": [[19, "dscribe.descriptors.lmbtr.LMBTR.__init__"]], "__init__() (dscribe.descriptors.mbtr.mbtr method)": [[20, "dscribe.descriptors.mbtr.MBTR.__init__"]], "__init__() (dscribe.descriptors.sinematrix.sinematrix method)": [[21, "dscribe.descriptors.sinematrix.SineMatrix.__init__"]], "__init__() (dscribe.descriptors.soap.soap method)": [[22, "dscribe.descriptors.soap.SOAP.__init__"]], "__init__() (dscribe.descriptors.valleoganov.valleoganov method)": [[23, "dscribe.descriptors.valleoganov.ValleOganov.__init__"]]}}) \ No newline at end of file +Search.setIndex({"alltitles": {"2019": [[13, "id4"]], "2020": [[13, "id1"]], "API": [[1, "api"]], "About": [[0, "about"]], "Accuracy": [[18, "accuracy"]], "Adsorption site analysis": [[19, "adsorption-site-analysis"]], "Analysis": [[24, "analysis"], [25, "analysis"]], "Atom-centered Symmetry Functions": [[16, "atom-centered-symmetry-functions"]], "Authors": [[0, "authors"]], "Average kernel": [[26, "average-kernel"]], "Average output": [[22, "average-output"]], "Basic concepts": [[14, "basic-concepts"]], "Basics": [[28, "basics"]], "Building similarity kernels from local environments": [[26, "building-similarity-kernels-from-local-environments"]], "Call signature": [[15, "call-signature"]], "Capabilities at a Glance": [[11, "capabilities-at-a-glance"]], "Changelog": [[2, "changelog"]], "Chemical Environment Visualization with Local Descriptors": [[29, "chemical-environment-visualization-with-local-descriptors"]], "Citing DScribe": [[3, "citing-dscribe"]], "Code style guideline": [[4, "code-style-guideline"]], "Coloring": [[29, "coloring"]], "Common issues": [[12, "common-issues"]], "Contact": [[0, "contact"]], "Contributing": [[4, "contributing"]], "Conversion": [[27, "conversion"]], "Coulomb Matrix": [[17, "coulomb-matrix"]], "Creation": [[16, "creation"], [17, "creation"], [18, "creation"], [19, "creation"], [20, "creation"], [21, "creation"], [22, "creation"], [23, "creation"]], "DScribe": [[11, "dscribe"]], "Dataset generation": [[24, "dataset-generation"], [25, "dataset-generation"]], "Derivatives": [[15, "derivatives"]], "Descriptors": [[28, "descriptors"]], "Ewald sum matrix": [[18, "ewald-sum-matrix"]], "Examples": [[17, "examples"], [18, "examples"], [19, "examples"], [20, "examples"], [21, "examples"], [22, "examples"], [23, "examples"]], "Finite systems": [[20, "finite-systems"], [22, "finite-systems"]], "Flattening": [[17, "flattening"]], "From source": [[12, "from-source"]], "Funding": [[0, "funding"]], "Go Deeper": [[11, "go-deeper"]], "Installation": [[12, "installation"]], "Interaction in a periodic crystal": [[21, "interaction-in-a-periodic-crystal"]], "Invariance": [[17, "invariance"]], "Layout": [[15, "layout"]], "License": [[0, "license"]], "Local Many-body Tensor Representation": [[19, "local-many-body-tensor-representation"]], "Locating information": [[20, "locating-information"], [22, "locating-information"]], "Machine Learning": [[28, "machine-learning"]], "Many-body Tensor Representation": [[20, "many-body-tensor-representation"]], "Module contents": [[5, "module-dscribe"], [6, "module-dscribe.core"], [7, "module-dscribe.descriptors"], [8, "module-dscribe.kernels"], [9, "module-dscribe.utils"]], "Normalization": [[20, "normalization"]], "Not meant for periodic systems": [[17, "not-meant-for-periodic-systems"]], "Options for permutation": [[17, "options-for-permutation"]], "Periodic systems": [[20, "periodic-systems"], [22, "periodic-systems"]], "Persistence": [[27, "persistence"]], "Publications": [[13, "publications"]], "REMatch kernel": [[26, "rematch-kernel"]], "References and final system": [[29, "references-and-final-system"]], "Setup": [[16, "setup"], [17, "setup"], [18, "setup"], [19, "setup"], [20, "setup"], [21, "setup"], [22, "setup"], [23, "setup"], [24, "setup"], [25, "setup"]], "Setup with MBTR class": [[23, "setup-with-mbtr-class"]], "Side by side with MBTR output": [[23, "side-by-side-with-mbtr-output"]], "Similarity Analysis": [[28, "similarity-analysis"]], "Sine matrix": [[21, "sine-matrix"]], "Smooth Overlap of Atomic Positions": [[22, "smooth-overlap-of-atomic-positions"]], "Sparse output": [[22, "sparse-output"], [27, "sparse-output"]], "Submodules": [[5, "submodules"], [6, "submodules"], [7, "submodules"], [8, "submodules"], [9, "submodules"]], "Subpackages": [[5, "subpackages"]], "Supervised Learning: Training an ML Force-field": [[25, "supervised-learning-training-an-ml-force-field"]], "Terminology": [[14, "terminology"]], "The geometry and weighting functions": [[20, "id17"]], "Total electrostatic energy": [[18, "total-electrostatic-energy"]], "Training": [[24, "training"], [25, "training"]], "Tutorials": [[28, "tutorials"]], "Typical workflow": [[14, "typical-workflow"]], "Unsupervised Learning: Clustering": [[24, "unsupervised-learning-clustering"]], "Valle-Oganov descriptor": [[23, "valle-oganov-descriptor"]], "Visualization": [[20, "visualization"], [23, "visualization"], [28, "visualization"]], "Weighting": [[22, "weighting"]], "Zero-padding": [[17, "zero-padding"]], "conda": [[12, "conda"]], "dscribe": [[10, "dscribe"]], "dscribe package": [[5, "dscribe-package"]], "dscribe.core package": [[6, "dscribe-core-package"]], "dscribe.core.lattice module": [[6, "module-dscribe.core.lattice"]], "dscribe.core.system module": [[6, "module-dscribe.core.system"]], "dscribe.descriptors package": [[7, "dscribe-descriptors-package"]], "dscribe.descriptors.acsf module": [[7, "module-dscribe.descriptors.acsf"]], "dscribe.descriptors.coulombmatrix module": [[7, "module-dscribe.descriptors.coulombmatrix"]], "dscribe.descriptors.descriptor module": [[7, "module-dscribe.descriptors.descriptor"]], "dscribe.descriptors.descriptorglobal module": [[7, "module-dscribe.descriptors.descriptorglobal"]], "dscribe.descriptors.descriptorlocal module": [[7, "module-dscribe.descriptors.descriptorlocal"]], "dscribe.descriptors.descriptormatrix module": [[7, "module-dscribe.descriptors.descriptormatrix"]], "dscribe.descriptors.ewaldsummatrix module": [[7, "module-dscribe.descriptors.ewaldsummatrix"]], "dscribe.descriptors.lmbtr module": [[7, "module-dscribe.descriptors.lmbtr"]], "dscribe.descriptors.mbtr module": [[7, "module-dscribe.descriptors.mbtr"]], "dscribe.descriptors.sinematrix module": [[7, "module-dscribe.descriptors.sinematrix"]], "dscribe.descriptors.soap module": [[7, "module-dscribe.descriptors.soap"]], "dscribe.descriptors.valleoganov module": [[7, "module-dscribe.descriptors.valleoganov"]], "dscribe.ext module": [[5, "module-dscribe.ext"]], "dscribe.kernels package": [[8, "dscribe-kernels-package"]], "dscribe.kernels.averagekernel module": [[8, "module-dscribe.kernels.averagekernel"]], "dscribe.kernels.localsimilaritykernel module": [[8, "module-dscribe.kernels.localsimilaritykernel"]], "dscribe.kernels.rematchkernel module": [[8, "module-dscribe.kernels.rematchkernel"]], "dscribe.utils package": [[9, "dscribe-utils-package"]], "dscribe.utils.dimensionality module": [[9, "module-dscribe.utils.dimensionality"]], "dscribe.utils.geometry module": [[9, "module-dscribe.utils.geometry"]], "dscribe.utils.species module": [[9, "module-dscribe.utils.species"]], "dscribe.utils.stats module": [[9, "module-dscribe.utils.stats"]], "pip": [[12, "pip"]]}, "docnames": ["about", "api", "changelog", "citing", "contributing", "doc/dscribe", "doc/dscribe.core", "doc/dscribe.descriptors", "doc/dscribe.kernels", "doc/dscribe.utils", "doc/modules", "index", "install", "publications", "tutorials/basics", "tutorials/derivatives", "tutorials/descriptors/acsf", "tutorials/descriptors/coulomb_matrix", "tutorials/descriptors/ewald_sum_matrix", "tutorials/descriptors/lmbtr", "tutorials/descriptors/mbtr", "tutorials/descriptors/sine_matrix", "tutorials/descriptors/soap", "tutorials/descriptors/valleoganov", "tutorials/machine_learning/clustering", "tutorials/machine_learning/forces_and_energies", "tutorials/similarity_analysis/kernels", "tutorials/sparse", "tutorials/tutorials", "tutorials/visualization/coloring_by_environment"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "sphinxcontrib.bibtex": 9}, "filenames": ["about.rst", "api.rst", "changelog.rst", "citing.rst", "contributing.rst", "doc/dscribe.rst", "doc/dscribe.core.rst", "doc/dscribe.descriptors.rst", "doc/dscribe.kernels.rst", "doc/dscribe.utils.rst", "doc/modules.rst", "index.rst", "install.rst", "publications.rst", "tutorials/basics.rst", "tutorials/derivatives.rst", "tutorials/descriptors/acsf.rst", "tutorials/descriptors/coulomb_matrix.rst", "tutorials/descriptors/ewald_sum_matrix.rst", "tutorials/descriptors/lmbtr.rst", "tutorials/descriptors/mbtr.rst", "tutorials/descriptors/sine_matrix.rst", "tutorials/descriptors/soap.rst", "tutorials/descriptors/valleoganov.rst", "tutorials/machine_learning/clustering.rst", "tutorials/machine_learning/forces_and_energies.rst", "tutorials/similarity_analysis/kernels.rst", "tutorials/sparse.rst", "tutorials/tutorials.rst", "tutorials/visualization/coloring_by_environment.rst"], "indexentries": {"__init__() (dscribe.descriptors.acsf.acsf method)": [[16, "dscribe.descriptors.acsf.ACSF.__init__", false]], "__init__() (dscribe.descriptors.coulombmatrix.coulombmatrix method)": [[17, "dscribe.descriptors.coulombmatrix.CoulombMatrix.__init__", false]], "__init__() (dscribe.descriptors.ewaldsummatrix.ewaldsummatrix method)": [[18, "dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix.__init__", false]], "__init__() (dscribe.descriptors.lmbtr.lmbtr method)": [[19, "dscribe.descriptors.lmbtr.LMBTR.__init__", false]], "__init__() (dscribe.descriptors.mbtr.mbtr method)": [[20, "dscribe.descriptors.mbtr.MBTR.__init__", false]], "__init__() (dscribe.descriptors.sinematrix.sinematrix method)": [[21, "dscribe.descriptors.sinematrix.SineMatrix.__init__", false]], "__init__() (dscribe.descriptors.soap.soap method)": [[22, "dscribe.descriptors.soap.SOAP.__init__", false]], "__init__() (dscribe.descriptors.valleoganov.valleoganov method)": [[23, "dscribe.descriptors.valleoganov.ValleOganov.__init__", false]], "abc (dscribe.core.lattice.lattice property)": [[6, "dscribe.core.lattice.Lattice.abc", false]], "acsf (class in dscribe.descriptors.acsf)": [[7, "dscribe.descriptors.acsf.ACSF", false]], "acsfwrapper (class in dscribe.ext)": [[5, "dscribe.ext.ACSFWrapper", false]], "atomic_numbers (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.atomic_numbers", false]], "atomic_numbers (dscribe.ext.extendedsystem property)": [[5, "dscribe.ext.ExtendedSystem.atomic_numbers", false]], "averagekernel (class in dscribe.kernels.averagekernel)": [[8, "dscribe.kernels.averagekernel.AverageKernel", false]], "celllist (class in dscribe.ext)": [[5, "dscribe.ext.CellList", false]], "celllistresult (class in dscribe.ext)": [[5, "dscribe.ext.CellListResult", false]], "check_geometry() (in module dscribe.descriptors.mbtr)": [[7, "dscribe.descriptors.mbtr.check_geometry", false]], "check_grid() (in module dscribe.descriptors.mbtr)": [[7, "dscribe.descriptors.mbtr.check_grid", false]], "check_weighting() (in module dscribe.descriptors.mbtr)": [[7, "dscribe.descriptors.mbtr.check_weighting", false]], "compression (dscribe.descriptors.soap.soap property)": [[7, "dscribe.descriptors.soap.SOAP.compression", false]], "coulombmatrix (class in dscribe.descriptors.coulombmatrix)": [[7, "dscribe.descriptors.coulombmatrix.CoulombMatrix", false]], "coulombmatrix (class in dscribe.ext)": [[5, "dscribe.ext.CoulombMatrix", false]], "create() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.create", false]], "create() (dscribe.descriptors.coulombmatrix.coulombmatrix method)": [[7, "dscribe.descriptors.coulombmatrix.CoulombMatrix.create", false]], "create() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.create", false]], "create() (dscribe.descriptors.ewaldsummatrix.ewaldsummatrix method)": [[7, "dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix.create", false]], "create() (dscribe.descriptors.lmbtr.lmbtr method)": [[7, "dscribe.descriptors.lmbtr.LMBTR.create", false]], "create() (dscribe.descriptors.mbtr.mbtr method)": [[7, "dscribe.descriptors.mbtr.MBTR.create", false]], "create() (dscribe.descriptors.sinematrix.sinematrix method)": [[7, "dscribe.descriptors.sinematrix.SineMatrix.create", false]], "create() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.create", false]], "create() (dscribe.ext.acsfwrapper method)": [[5, "dscribe.ext.ACSFWrapper.create", false]], "create() (dscribe.ext.coulombmatrix method)": [[5, "dscribe.ext.CoulombMatrix.create", false]], "create() (dscribe.ext.soapgto method)": [[5, "dscribe.ext.SOAPGTO.create", false]], "create() (dscribe.ext.soappolynomial method)": [[5, "dscribe.ext.SOAPPolynomial.create", false]], "create() (dscribe.kernels.localsimilaritykernel.localsimilaritykernel method)": [[8, "dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel.create", false]], "create_parallel() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.create_parallel", false]], "create_single() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.create_single", false]], "create_single() (dscribe.descriptors.coulombmatrix.coulombmatrix method)": [[7, "dscribe.descriptors.coulombmatrix.CoulombMatrix.create_single", false]], "create_single() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.create_single", false]], "create_single() (dscribe.descriptors.ewaldsummatrix.ewaldsummatrix method)": [[7, "dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix.create_single", false]], "create_single() (dscribe.descriptors.lmbtr.lmbtr method)": [[7, "dscribe.descriptors.lmbtr.LMBTR.create_single", false]], "create_single() (dscribe.descriptors.mbtr.mbtr method)": [[7, "dscribe.descriptors.mbtr.MBTR.create_single", false]], "create_single() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.create_single", false]], "derivatives() (dscribe.descriptors.descriptorglobal.descriptorglobal method)": [[7, "dscribe.descriptors.descriptorglobal.DescriptorGlobal.derivatives", false]], "derivatives() (dscribe.descriptors.descriptorlocal.descriptorlocal method)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal.derivatives", false]], "derivatives_analytical() (dscribe.descriptors.mbtr.mbtr method)": [[7, "dscribe.descriptors.mbtr.MBTR.derivatives_analytical", false]], "derivatives_analytical() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.derivatives_analytical", false]], "derivatives_analytical() (dscribe.ext.soapgto method)": [[5, "dscribe.ext.SOAPGTO.derivatives_analytical", false]], "derivatives_numerical() (dscribe.descriptors.coulombmatrix.coulombmatrix method)": [[7, "dscribe.descriptors.coulombmatrix.CoulombMatrix.derivatives_numerical", false]], "derivatives_numerical() (dscribe.descriptors.descriptorglobal.descriptorglobal method)": [[7, "dscribe.descriptors.descriptorglobal.DescriptorGlobal.derivatives_numerical", false]], "derivatives_numerical() (dscribe.descriptors.descriptorlocal.descriptorlocal method)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal.derivatives_numerical", false]], "derivatives_numerical() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.derivatives_numerical", false]], "derivatives_numerical() (dscribe.ext.coulombmatrix method)": [[5, "dscribe.ext.CoulombMatrix.derivatives_numerical", false]], "derivatives_numerical() (dscribe.ext.soapgto method)": [[5, "dscribe.ext.SOAPGTO.derivatives_numerical", false]], "derivatives_numerical() (dscribe.ext.soappolynomial method)": [[5, "dscribe.ext.SOAPPolynomial.derivatives_numerical", false]], "derivatives_parallel() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.derivatives_parallel", false]], "derivatives_single() (dscribe.descriptors.descriptorglobal.descriptorglobal method)": [[7, "dscribe.descriptors.descriptorglobal.DescriptorGlobal.derivatives_single", false]], "derivatives_single() (dscribe.descriptors.descriptorlocal.descriptorlocal method)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal.derivatives_single", false]], "descriptor (class in dscribe.descriptors.descriptor)": [[7, "dscribe.descriptors.descriptor.Descriptor", false]], "descriptorglobal (class in dscribe.descriptors.descriptorglobal)": [[7, "dscribe.descriptors.descriptorglobal.DescriptorGlobal", false]], "descriptorlocal (class in dscribe.descriptors.descriptorlocal)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal", false]], "descriptormatrix (class in dscribe.descriptors.descriptormatrix)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix", false]], "distances (dscribe.ext.celllistresult property)": [[5, "dscribe.ext.CellListResult.distances", false]], "distances_squared (dscribe.ext.celllistresult property)": [[5, "dscribe.ext.CellListResult.distances_squared", false]], "dscribe": [[5, "module-dscribe", false]], "dscribe.core": [[6, "module-dscribe.core", false]], "dscribe.core.lattice": [[6, "module-dscribe.core.lattice", false]], "dscribe.core.system": [[6, "module-dscribe.core.system", false]], "dscribe.descriptors": [[7, "module-dscribe.descriptors", false]], "dscribe.descriptors.acsf": [[7, "module-dscribe.descriptors.acsf", false]], "dscribe.descriptors.coulombmatrix": [[7, "module-dscribe.descriptors.coulombmatrix", false]], "dscribe.descriptors.descriptor": [[7, "module-dscribe.descriptors.descriptor", false]], "dscribe.descriptors.descriptorglobal": [[7, "module-dscribe.descriptors.descriptorglobal", false]], "dscribe.descriptors.descriptorlocal": [[7, "module-dscribe.descriptors.descriptorlocal", false]], "dscribe.descriptors.descriptormatrix": [[7, "module-dscribe.descriptors.descriptormatrix", false]], "dscribe.descriptors.ewaldsummatrix": [[7, "module-dscribe.descriptors.ewaldsummatrix", false]], "dscribe.descriptors.lmbtr": [[7, "module-dscribe.descriptors.lmbtr", false]], "dscribe.descriptors.mbtr": [[7, "module-dscribe.descriptors.mbtr", false]], "dscribe.descriptors.sinematrix": [[7, "module-dscribe.descriptors.sinematrix", false]], "dscribe.descriptors.soap": [[7, "module-dscribe.descriptors.soap", false]], "dscribe.descriptors.valleoganov": [[7, "module-dscribe.descriptors.valleoganov", false]], "dscribe.ext": [[5, "module-dscribe.ext", false]], "dscribe.kernels": [[8, "module-dscribe.kernels", false]], "dscribe.kernels.averagekernel": [[8, "module-dscribe.kernels.averagekernel", false]], "dscribe.kernels.localsimilaritykernel": [[8, "module-dscribe.kernels.localsimilaritykernel", false]], "dscribe.kernels.rematchkernel": [[8, "module-dscribe.kernels.rematchkernel", false]], "dscribe.utils": [[9, "module-dscribe.utils", false]], "dscribe.utils.dimensionality": [[9, "module-dscribe.utils.dimensionality", false]], "dscribe.utils.geometry": [[9, "module-dscribe.utils.geometry", false]], "dscribe.utils.species": [[9, "module-dscribe.utils.species", false]], "dscribe.utils.stats": [[9, "module-dscribe.utils.stats", false]], "ewaldsummatrix (class in dscribe.descriptors.ewaldsummatrix)": [[7, "dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix", false]], "extend_system() (in module dscribe.ext)": [[5, "dscribe.ext.extend_system", false]], "extendedsystem (class in dscribe.ext)": [[5, "dscribe.ext.ExtendedSystem", false]], "format_array() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.format_array", false]], "from_atoms() (dscribe.core.system.system static method)": [[6, "dscribe.core.system.System.from_atoms", false]], "g2_params (dscribe.descriptors.acsf.acsf property)": [[7, "dscribe.descriptors.acsf.ACSF.g2_params", false]], "g2_params (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.g2_params", false]], "g3_params (dscribe.descriptors.acsf.acsf property)": [[7, "dscribe.descriptors.acsf.ACSF.g3_params", false]], "g3_params (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.g3_params", false]], "g4_params (dscribe.descriptors.acsf.acsf property)": [[7, "dscribe.descriptors.acsf.ACSF.g4_params", false]], "g4_params (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.g4_params", false]], "g5_params (dscribe.descriptors.acsf.acsf property)": [[7, "dscribe.descriptors.acsf.ACSF.g5_params", false]], "g5_params (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.g5_params", false]], "geometry (dscribe.descriptors.lmbtr.lmbtr property)": [[7, "dscribe.descriptors.lmbtr.LMBTR.geometry", false]], "geometry (dscribe.descriptors.mbtr.mbtr property)": [[7, "dscribe.descriptors.mbtr.MBTR.geometry", false]], "get_adjacency_list() (in module dscribe.utils.geometry)": [[9, "dscribe.utils.geometry.get_adjacency_list", false]], "get_adjacency_matrix() (in module dscribe.utils.geometry)": [[9, "dscribe.utils.geometry.get_adjacency_matrix", false]], "get_atomic_numbers() (in module dscribe.utils.species)": [[9, "dscribe.utils.species.get_atomic_numbers", false]], "get_basis_gto() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.get_basis_gto", false]], "get_basis_poly() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.get_basis_poly", false]], "get_cartesian_coords() (dscribe.core.lattice.lattice method)": [[6, "dscribe.core.lattice.Lattice.get_cartesian_coords", false]], "get_cell_inverse() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.get_cell_inverse", false]], "get_cutoff_padding() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.get_cutoff_padding", false]], "get_displacement_tensor() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.get_displacement_tensor", false]], "get_distance_matrix() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.get_distance_matrix", false]], "get_distance_matrix_within_radius() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.get_distance_matrix_within_radius", false]], "get_eigenspectrum() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.get_eigenspectrum", false]], "get_extended_system() (in module dscribe.utils.geometry)": [[9, "dscribe.utils.geometry.get_extended_system", false]], "get_fractional_coords() (dscribe.core.lattice.lattice method)": [[6, "dscribe.core.lattice.Lattice.get_fractional_coords", false]], "get_global_similarity() (dscribe.kernels.averagekernel.averagekernel method)": [[8, "dscribe.kernels.averagekernel.AverageKernel.get_global_similarity", false]], "get_global_similarity() (dscribe.kernels.localsimilaritykernel.localsimilaritykernel method)": [[8, "dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel.get_global_similarity", false]], "get_global_similarity() (dscribe.kernels.rematchkernel.rematchkernel method)": [[8, "dscribe.kernels.rematchkernel.REMatchKernel.get_global_similarity", false]], "get_inverse_distance_matrix() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.get_inverse_distance_matrix", false]], "get_k1() (dscribe.ext.mbtrwrapper method)": [[5, "dscribe.ext.MBTRWrapper.get_k1", false]], "get_k2() (dscribe.ext.mbtrwrapper method)": [[5, "dscribe.ext.MBTRWrapper.get_k2", false]], "get_k2_local() (dscribe.ext.mbtrwrapper method)": [[5, "dscribe.ext.MBTRWrapper.get_k2_local", false]], "get_k3() (dscribe.ext.mbtrwrapper method)": [[5, "dscribe.ext.MBTRWrapper.get_k3", false]], "get_k3_local() (dscribe.ext.mbtrwrapper method)": [[5, "dscribe.ext.MBTRWrapper.get_k3_local", false]], "get_location() (dscribe.descriptors.lmbtr.lmbtr method)": [[7, "dscribe.descriptors.lmbtr.LMBTR.get_location", false]], "get_location() (dscribe.descriptors.mbtr.mbtr method)": [[7, "dscribe.descriptors.mbtr.MBTR.get_location", false]], "get_location() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.get_location", false]], "get_matrix() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.get_matrix", false]], "get_matrix() (dscribe.descriptors.ewaldsummatrix.ewaldsummatrix method)": [[7, "dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix.get_matrix", false]], "get_matrix() (dscribe.descriptors.sinematrix.sinematrix method)": [[7, "dscribe.descriptors.sinematrix.SineMatrix.get_matrix", false]], "get_neighbours_for_index() (dscribe.ext.celllist method)": [[5, "dscribe.ext.CellList.get_neighbours_for_index", false]], "get_neighbours_for_position() (dscribe.ext.celllist method)": [[5, "dscribe.ext.CellList.get_neighbours_for_position", false]], "get_number_of_features() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.get_number_of_features", false]], "get_number_of_features() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.get_number_of_features", false]], "get_number_of_features() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.get_number_of_features", false]], "get_number_of_features() (dscribe.descriptors.lmbtr.lmbtr method)": [[7, "dscribe.descriptors.lmbtr.LMBTR.get_number_of_features", false]], "get_number_of_features() (dscribe.descriptors.mbtr.mbtr method)": [[7, "dscribe.descriptors.mbtr.MBTR.get_number_of_features", false]], "get_number_of_features() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.get_number_of_features", false]], "get_number_of_features() (dscribe.ext.acsfwrapper method)": [[5, "dscribe.ext.ACSFWrapper.get_number_of_features", false]], "get_pairwise_matrix() (dscribe.kernels.localsimilaritykernel.localsimilaritykernel method)": [[8, "dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel.get_pairwise_matrix", false]], "get_points_in_sphere() (dscribe.core.lattice.lattice method)": [[6, "dscribe.core.lattice.Lattice.get_points_in_sphere", false]], "grid (dscribe.descriptors.lmbtr.lmbtr property)": [[7, "dscribe.descriptors.lmbtr.LMBTR.grid", false]], "grid (dscribe.descriptors.mbtr.mbtr property)": [[7, "dscribe.descriptors.mbtr.MBTR.grid", false]], "indices (dscribe.ext.celllistresult property)": [[5, "dscribe.ext.CellListResult.indices", false]], "indices (dscribe.ext.extendedsystem property)": [[5, "dscribe.ext.ExtendedSystem.indices", false]], "init_derivatives_array() (dscribe.descriptors.descriptorlocal.descriptorlocal method)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal.init_derivatives_array", false]], "init_descriptor_array() (dscribe.descriptors.descriptorlocal.descriptorlocal method)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal.init_descriptor_array", false]], "init_internal_array() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.init_internal_array", false]], "init_internal_dev_array() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.init_internal_dev_array", false]], "inv_matrix (dscribe.core.lattice.lattice property)": [[6, "dscribe.core.lattice.Lattice.inv_matrix", false]], "is1d() (in module dscribe.utils.dimensionality)": [[9, "dscribe.utils.dimensionality.is1d", false]], "is2d() (in module dscribe.utils.dimensionality)": [[9, "dscribe.utils.dimensionality.is2d", false]], "lattice (class in dscribe.core.lattice)": [[6, "dscribe.core.lattice.Lattice", false]], "lengths (dscribe.core.lattice.lattice property)": [[6, "dscribe.core.lattice.Lattice.lengths", false]], "lmbtr (class in dscribe.descriptors.lmbtr)": [[7, "dscribe.descriptors.lmbtr.LMBTR", false]], "localsimilaritykernel (class in dscribe.kernels.localsimilaritykernel)": [[8, "dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel", false]], "matrix (dscribe.core.lattice.lattice property)": [[6, "dscribe.core.lattice.Lattice.matrix", false]], "mbtr (class in dscribe.descriptors.mbtr)": [[7, "dscribe.descriptors.mbtr.MBTR", false]], "mbtrwrapper (class in dscribe.ext)": [[5, "dscribe.ext.MBTRWrapper", false]], "module": [[5, "module-dscribe", false], [5, "module-dscribe.ext", false], [6, "module-dscribe.core", false], [6, "module-dscribe.core.lattice", false], [6, "module-dscribe.core.system", false], [7, "module-dscribe.descriptors", false], [7, "module-dscribe.descriptors.acsf", false], [7, "module-dscribe.descriptors.coulombmatrix", false], [7, "module-dscribe.descriptors.descriptor", false], [7, "module-dscribe.descriptors.descriptorglobal", false], [7, "module-dscribe.descriptors.descriptorlocal", false], [7, "module-dscribe.descriptors.descriptormatrix", false], [7, "module-dscribe.descriptors.ewaldsummatrix", false], [7, "module-dscribe.descriptors.lmbtr", false], [7, "module-dscribe.descriptors.mbtr", false], [7, "module-dscribe.descriptors.sinematrix", false], [7, "module-dscribe.descriptors.soap", false], [7, "module-dscribe.descriptors.valleoganov", false], [8, "module-dscribe.kernels", false], [8, "module-dscribe.kernels.averagekernel", false], [8, "module-dscribe.kernels.localsimilaritykernel", false], [8, "module-dscribe.kernels.rematchkernel", false], [9, "module-dscribe.utils", false], [9, "module-dscribe.utils.dimensionality", false], [9, "module-dscribe.utils.geometry", false], [9, "module-dscribe.utils.species", false], [9, "module-dscribe.utils.stats", false]], "n_g2 (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.n_g2", false]], "n_g3 (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.n_g3", false]], "n_g4 (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.n_g4", false]], "n_g5 (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.n_g5", false]], "n_type_pairs (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.n_type_pairs", false]], "n_types (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.n_types", false]], "normalization (dscribe.descriptors.lmbtr.lmbtr property)": [[7, "dscribe.descriptors.lmbtr.LMBTR.normalization", false]], "normalization (dscribe.descriptors.mbtr.mbtr property)": [[7, "dscribe.descriptors.mbtr.MBTR.normalization", false]], "periodic (dscribe.descriptors.descriptor.descriptor property)": [[7, "dscribe.descriptors.descriptor.Descriptor.periodic", false]], "positions (dscribe.ext.extendedsystem property)": [[5, "dscribe.ext.ExtendedSystem.positions", false]], "prepare_centers() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.prepare_centers", false]], "r_cut (dscribe.descriptors.acsf.acsf property)": [[7, "dscribe.descriptors.acsf.ACSF.r_cut", false]], "r_cut (dscribe.ext.acsfwrapper property)": [[5, "dscribe.ext.ACSFWrapper.r_cut", false]], "reciprocal_lattice (dscribe.core.lattice.lattice property)": [[6, "dscribe.core.lattice.Lattice.reciprocal_lattice", false]], "reciprocal_lattice_crystallographic (dscribe.core.lattice.lattice property)": [[6, "dscribe.core.lattice.Lattice.reciprocal_lattice_crystallographic", false]], "rematchkernel (class in dscribe.kernels.rematchkernel)": [[8, "dscribe.kernels.rematchkernel.REMatchKernel", false]], "set_cell() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.set_cell", false]], "set_pbc() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.set_pbc", false]], "set_positions() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.set_positions", false]], "set_scaled_positions() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.set_scaled_positions", false]], "sinematrix (class in dscribe.descriptors.sinematrix)": [[7, "dscribe.descriptors.sinematrix.SineMatrix", false]], "soap (class in dscribe.descriptors.soap)": [[7, "dscribe.descriptors.soap.SOAP", false]], "soapgto (class in dscribe.ext)": [[5, "dscribe.ext.SOAPGTO", false]], "soappolynomial (class in dscribe.ext)": [[5, "dscribe.ext.SOAPPolynomial", false]], "sort() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.sort", false]], "sort_randomly() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.sort_randomly", false]], "sparse (dscribe.descriptors.descriptor.descriptor property)": [[7, "dscribe.descriptors.descriptor.Descriptor.sparse", false]], "species (dscribe.descriptors.acsf.acsf property)": [[7, "dscribe.descriptors.acsf.ACSF.species", false]], "species (dscribe.descriptors.lmbtr.lmbtr property)": [[7, "dscribe.descriptors.lmbtr.LMBTR.species", false]], "species (dscribe.descriptors.mbtr.mbtr property)": [[7, "dscribe.descriptors.mbtr.MBTR.species", false]], "species (dscribe.descriptors.soap.soap property)": [[7, "dscribe.descriptors.soap.SOAP.species", false]], "symbols_to_numbers() (in module dscribe.utils.species)": [[9, "dscribe.utils.species.symbols_to_numbers", false]], "system (class in dscribe.core.system)": [[6, "dscribe.core.system.System", false]], "system_stats() (in module dscribe.utils.stats)": [[9, "dscribe.utils.stats.system_stats", false]], "to_cartesian() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.to_cartesian", false]], "to_scaled() (dscribe.core.system.system method)": [[6, "dscribe.core.system.System.to_scaled", false]], "unflatten() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.unflatten", false]], "validate_atomic_numbers() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.validate_atomic_numbers", false]], "validate_cell() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.validate_cell", false]], "validate_derivatives_method() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.validate_derivatives_method", false]], "validate_derivatives_method() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.validate_derivatives_method", false]], "validate_derivatives_method() (dscribe.descriptors.descriptorlocal.descriptorlocal method)": [[7, "dscribe.descriptors.descriptorlocal.DescriptorLocal.validate_derivatives_method", false]], "validate_derivatives_method() (dscribe.descriptors.mbtr.mbtr method)": [[7, "dscribe.descriptors.mbtr.MBTR.validate_derivatives_method", false]], "validate_derivatives_method() (dscribe.descriptors.soap.soap method)": [[7, "dscribe.descriptors.soap.SOAP.validate_derivatives_method", false]], "validate_g2_params() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.validate_g2_params", false]], "validate_g3_params() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.validate_g3_params", false]], "validate_g4_params() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.validate_g4_params", false]], "validate_g5_params() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.validate_g5_params", false]], "validate_pbc() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.validate_pbc", false]], "validate_positions() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.validate_positions", false]], "validate_r_cut() (dscribe.descriptors.acsf.acsf method)": [[7, "dscribe.descriptors.acsf.ACSF.validate_r_cut", false]], "validate_species() (dscribe.descriptors.descriptor.descriptor method)": [[7, "dscribe.descriptors.descriptor.Descriptor.validate_species", false]], "valleoganov (class in dscribe.descriptors.valleoganov)": [[7, "dscribe.descriptors.valleoganov.ValleOganov", false]], "weighting (dscribe.descriptors.lmbtr.lmbtr property)": [[7, "dscribe.descriptors.lmbtr.LMBTR.weighting", false]], "weighting (dscribe.descriptors.mbtr.mbtr property)": [[7, "dscribe.descriptors.mbtr.MBTR.weighting", false]], "zero_pad() (dscribe.descriptors.descriptormatrix.descriptormatrix method)": [[7, "dscribe.descriptors.descriptormatrix.DescriptorMatrix.zero_pad", false]]}, "objects": {"": [[5, 0, 0, "-", "dscribe"]], "dscribe": [[6, 0, 0, "-", "core"], [7, 0, 0, "-", "descriptors"], [5, 0, 0, "-", "ext"], [8, 0, 0, "-", "kernels"], [9, 0, 0, "-", "utils"]], "dscribe.core": [[6, 0, 0, "-", "lattice"], [6, 0, 0, "-", "system"]], "dscribe.core.lattice": [[6, 1, 1, "", "Lattice"]], "dscribe.core.lattice.Lattice": [[6, 2, 1, "", "abc"], [6, 3, 1, "", "get_cartesian_coords"], [6, 3, 1, "", "get_fractional_coords"], [6, 3, 1, "", "get_points_in_sphere"], [6, 2, 1, "", "inv_matrix"], [6, 2, 1, "", "lengths"], [6, 2, 1, "", "matrix"], [6, 2, 1, "", "reciprocal_lattice"], [6, 2, 1, "", "reciprocal_lattice_crystallographic"]], "dscribe.core.system": [[6, 1, 1, "", "System"]], "dscribe.core.system.System": [[6, 3, 1, "", "from_atoms"], [6, 3, 1, "", "get_cell_inverse"], [6, 3, 1, "", "get_displacement_tensor"], [6, 3, 1, "", "get_distance_matrix"], [6, 3, 1, "", "get_distance_matrix_within_radius"], [6, 3, 1, "", "get_inverse_distance_matrix"], [6, 3, 1, "", "set_cell"], [6, 3, 1, "", "set_pbc"], [6, 3, 1, "", "set_positions"], [6, 3, 1, "", "set_scaled_positions"], [6, 3, 1, "", "to_cartesian"], [6, 3, 1, "", "to_scaled"]], "dscribe.descriptors": [[7, 0, 0, "-", "acsf"], [7, 0, 0, "-", "coulombmatrix"], [7, 0, 0, "-", "descriptor"], [7, 0, 0, "-", "descriptorglobal"], [7, 0, 0, "-", "descriptorlocal"], [7, 0, 0, "-", "descriptormatrix"], [7, 0, 0, "-", "ewaldsummatrix"], [7, 0, 0, "-", "lmbtr"], [7, 0, 0, "-", "mbtr"], [7, 0, 0, "-", "sinematrix"], [7, 0, 0, "-", "soap"], [7, 0, 0, "-", "valleoganov"]], "dscribe.descriptors.acsf": [[7, 1, 1, "", "ACSF"]], "dscribe.descriptors.acsf.ACSF": [[16, 3, 1, "", "__init__"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_single"], [7, 2, 1, "", "g2_params"], [7, 2, 1, "", "g3_params"], [7, 2, 1, "", "g4_params"], [7, 2, 1, "", "g5_params"], [7, 3, 1, "", "get_number_of_features"], [7, 2, 1, "", "r_cut"], [7, 2, 1, "", "species"], [7, 3, 1, "", "validate_derivatives_method"], [7, 3, 1, "", "validate_g2_params"], [7, 3, 1, "", "validate_g3_params"], [7, 3, 1, "", "validate_g4_params"], [7, 3, 1, "", "validate_g5_params"], [7, 3, 1, "", "validate_r_cut"]], "dscribe.descriptors.coulombmatrix": [[7, 1, 1, "", "CoulombMatrix"]], "dscribe.descriptors.coulombmatrix.CoulombMatrix": [[17, 3, 1, "", "__init__"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_single"], [7, 3, 1, "", "derivatives_numerical"]], "dscribe.descriptors.descriptor": [[7, 1, 1, "", "Descriptor"]], "dscribe.descriptors.descriptor.Descriptor": [[7, 3, 1, "", "create"], [7, 3, 1, "", "create_parallel"], [7, 3, 1, "", "derivatives_parallel"], [7, 3, 1, "", "format_array"], [7, 3, 1, "", "get_number_of_features"], [7, 2, 1, "", "periodic"], [7, 2, 1, "", "sparse"], [7, 3, 1, "", "validate_atomic_numbers"], [7, 3, 1, "", "validate_cell"], [7, 3, 1, "", "validate_derivatives_method"], [7, 3, 1, "", "validate_pbc"], [7, 3, 1, "", "validate_positions"], [7, 3, 1, "", "validate_species"]], "dscribe.descriptors.descriptorglobal": [[7, 1, 1, "", "DescriptorGlobal"]], "dscribe.descriptors.descriptorglobal.DescriptorGlobal": [[7, 3, 1, "", "derivatives"], [7, 3, 1, "", "derivatives_numerical"], [7, 3, 1, "", "derivatives_single"]], "dscribe.descriptors.descriptorlocal": [[7, 1, 1, "", "DescriptorLocal"]], "dscribe.descriptors.descriptorlocal.DescriptorLocal": [[7, 3, 1, "", "derivatives"], [7, 3, 1, "", "derivatives_numerical"], [7, 3, 1, "", "derivatives_single"], [7, 3, 1, "", "init_derivatives_array"], [7, 3, 1, "", "init_descriptor_array"], [7, 3, 1, "", "validate_derivatives_method"]], "dscribe.descriptors.descriptormatrix": [[7, 1, 1, "", "DescriptorMatrix"]], "dscribe.descriptors.descriptormatrix.DescriptorMatrix": [[7, 3, 1, "", "create_single"], [7, 3, 1, "", "get_eigenspectrum"], [7, 3, 1, "", "get_matrix"], [7, 3, 1, "", "get_number_of_features"], [7, 3, 1, "", "sort"], [7, 3, 1, "", "sort_randomly"], [7, 3, 1, "", "unflatten"], [7, 3, 1, "", "zero_pad"]], "dscribe.descriptors.ewaldsummatrix": [[7, 1, 1, "", "EwaldSumMatrix"]], "dscribe.descriptors.ewaldsummatrix.EwaldSumMatrix": [[18, 3, 1, "", "__init__"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_single"], [7, 3, 1, "", "get_matrix"]], "dscribe.descriptors.lmbtr": [[7, 1, 1, "", "LMBTR"]], "dscribe.descriptors.lmbtr.LMBTR": [[19, 3, 1, "", "__init__"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_single"], [7, 2, 1, "", "geometry"], [7, 3, 1, "", "get_location"], [7, 3, 1, "", "get_number_of_features"], [7, 2, 1, "", "grid"], [7, 2, 1, "", "normalization"], [7, 2, 1, "", "species"], [7, 2, 1, "", "weighting"]], "dscribe.descriptors.mbtr": [[7, 1, 1, "", "MBTR"], [7, 4, 1, "", "check_geometry"], [7, 4, 1, "", "check_grid"], [7, 4, 1, "", "check_weighting"]], "dscribe.descriptors.mbtr.MBTR": [[20, 3, 1, "", "__init__"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_single"], [7, 3, 1, "", "derivatives_analytical"], [7, 2, 1, "", "geometry"], [7, 3, 1, "", "get_location"], [7, 3, 1, "", "get_number_of_features"], [7, 2, 1, "", "grid"], [7, 2, 1, "", "normalization"], [7, 2, 1, "", "species"], [7, 3, 1, "", "validate_derivatives_method"], [7, 2, 1, "", "weighting"]], "dscribe.descriptors.sinematrix": [[7, 1, 1, "", "SineMatrix"]], "dscribe.descriptors.sinematrix.SineMatrix": [[21, 3, 1, "", "__init__"], [7, 3, 1, "", "create"], [7, 3, 1, "", "get_matrix"]], "dscribe.descriptors.soap": [[7, 1, 1, "", "SOAP"]], "dscribe.descriptors.soap.SOAP": [[22, 3, 1, "", "__init__"], [7, 2, 1, "", "compression"], [7, 3, 1, "", "create"], [7, 3, 1, "", "create_single"], [7, 3, 1, "", "derivatives_analytical"], [7, 3, 1, "", "derivatives_numerical"], [7, 3, 1, "", "get_basis_gto"], [7, 3, 1, "", "get_basis_poly"], [7, 3, 1, "", "get_cutoff_padding"], [7, 3, 1, "", "get_location"], [7, 3, 1, "", "get_number_of_features"], [7, 3, 1, "", "init_internal_array"], [7, 3, 1, "", "init_internal_dev_array"], [7, 3, 1, "", "prepare_centers"], [7, 2, 1, "", "species"], [7, 3, 1, "", "validate_derivatives_method"]], "dscribe.descriptors.valleoganov": [[7, 1, 1, "", "ValleOganov"]], "dscribe.descriptors.valleoganov.ValleOganov": [[23, 3, 1, "", "__init__"]], "dscribe.ext": [[5, 1, 1, "", "ACSFWrapper"], [5, 1, 1, "", "CellList"], [5, 1, 1, "", "CellListResult"], [5, 1, 1, "", "CoulombMatrix"], [5, 1, 1, "", "ExtendedSystem"], [5, 1, 1, "", "MBTRWrapper"], [5, 1, 1, "", "SOAPGTO"], [5, 1, 1, "", "SOAPPolynomial"], [5, 4, 1, "", "extend_system"]], "dscribe.ext.ACSFWrapper": [[5, 2, 1, "", "atomic_numbers"], [5, 3, 1, "", "create"], [5, 2, 1, "", "g2_params"], [5, 2, 1, "", "g3_params"], [5, 2, 1, "", "g4_params"], [5, 2, 1, "", "g5_params"], [5, 3, 1, "", "get_number_of_features"], [5, 2, 1, "", "n_g2"], [5, 2, 1, "", "n_g3"], [5, 2, 1, "", "n_g4"], [5, 2, 1, "", "n_g5"], [5, 2, 1, "", "n_type_pairs"], [5, 2, 1, "", "n_types"], [5, 2, 1, "", "r_cut"]], "dscribe.ext.CellList": [[5, 3, 1, "", "get_neighbours_for_index"], [5, 3, 1, "", "get_neighbours_for_position"]], "dscribe.ext.CellListResult": [[5, 2, 1, "", "distances"], [5, 2, 1, "", "distances_squared"], [5, 2, 1, "", "indices"]], "dscribe.ext.CoulombMatrix": [[5, 3, 1, "", "create"], [5, 3, 1, "", "derivatives_numerical"]], "dscribe.ext.ExtendedSystem": [[5, 2, 1, "", "atomic_numbers"], [5, 2, 1, "", "indices"], [5, 2, 1, "", "positions"]], "dscribe.ext.MBTRWrapper": [[5, 3, 1, "", "get_k1"], [5, 3, 1, "", "get_k2"], [5, 3, 1, "", "get_k2_local"], [5, 3, 1, "", "get_k3"], [5, 3, 1, "", "get_k3_local"]], "dscribe.ext.SOAPGTO": [[5, 3, 1, "", "create"], [5, 3, 1, "", "derivatives_analytical"], [5, 3, 1, "", "derivatives_numerical"]], "dscribe.ext.SOAPPolynomial": [[5, 3, 1, "", "create"], [5, 3, 1, "", "derivatives_numerical"]], "dscribe.kernels": [[8, 0, 0, "-", "averagekernel"], [8, 0, 0, "-", "localsimilaritykernel"], [8, 0, 0, "-", "rematchkernel"]], "dscribe.kernels.averagekernel": [[8, 1, 1, "", "AverageKernel"]], "dscribe.kernels.averagekernel.AverageKernel": [[8, 3, 1, "", "get_global_similarity"]], "dscribe.kernels.localsimilaritykernel": [[8, 1, 1, "", "LocalSimilarityKernel"]], "dscribe.kernels.localsimilaritykernel.LocalSimilarityKernel": [[8, 3, 1, "", "create"], [8, 3, 1, "", "get_global_similarity"], [8, 3, 1, "", "get_pairwise_matrix"]], "dscribe.kernels.rematchkernel": [[8, 1, 1, "", "REMatchKernel"]], "dscribe.kernels.rematchkernel.REMatchKernel": [[8, 3, 1, "", "get_global_similarity"]], "dscribe.utils": [[9, 0, 0, "-", "dimensionality"], [9, 0, 0, "-", "geometry"], [9, 0, 0, "-", "species"], [9, 0, 0, "-", "stats"]], "dscribe.utils.dimensionality": [[9, 4, 1, "", "is1d"], [9, 4, 1, "", "is2d"]], "dscribe.utils.geometry": [[9, 4, 1, "", "get_adjacency_list"], [9, 4, 1, "", "get_adjacency_matrix"], [9, 4, 1, "", "get_extended_system"]], "dscribe.utils.species": [[9, 4, 1, "", "get_atomic_numbers"], [9, 4, 1, "", "symbols_to_numbers"]], "dscribe.utils.stats": [[9, 4, 1, "", "system_stats"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "property", "Python property"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:property", "3": "py:method", "4": "py:function"}, "terms": {"": [0, 3, 6, 7, 14, 17, 18, 19, 20, 22, 24, 25, 27], "0": [0, 2, 3, 5, 6, 7, 8, 9, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "00016": 7, "0010": [3, 7], "00847": [7, 22], "0096": [7, 22], "01": 20, "018": [7, 22], "02": 20, "022": [7, 22], "024112": [7, 22], "04077": 26, "046": [18, 21], "05": [7, 18, 19], "058301": [7, 17], "06": 8, "06439": 20, "074106": [7, 16], "08": 25, "08927022": [7, 18], "0c05983": 13, "1": [2, 6, 7, 8, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "10": [3, 6, 7, 8, 12, 13, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29], "100": [7, 19, 20, 21, 22, 23, 24], "1002": [7, 21], "1016": [3, 7], "1021": 13, "1038": [7, 22], "1039": [7, 8, 22], "1063": [7, 13], "106949": 3, "108": [7, 17], "1080": [7, 18], "1094": 21, "11": 12, "1101": 21, "1103": [7, 17, 22], "111": [19, 24], "113": 2, "115": 21, "12": [24, 25, 29], "120": 6, "128": 14, "134": [7, 16], "13754": [7, 8, 22, 26], "13769": [22, 26], "138": 2, "15": [24, 25], "150": [13, 21], "15222": 23, "158": 3, "16": [21, 22, 25], "1601": 26, "166": [7, 22], "1704": 20, "18": [7, 8, 22, 26], "180": 23, "184115": [7, 22], "1988": 7, "1996": 7, "1d": [2, 7], "1e": [7, 8, 18, 19, 20, 22, 23, 25, 26, 29], "1e10": 18, "2": [0, 2, 3, 5, 6, 7, 8, 9, 12, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29], "20": [2, 6, 7, 13, 18, 22, 23, 25, 26], "200": [19, 20, 23, 25, 29], "2000": 29, "2010": 23, "2011": [7, 16], "2012": [7, 17, 23], "2013": [7, 18, 22], "2015": [7, 21], "2016": [7, 8, 22, 26], "2017": 20, "2018": [7, 22], "2019": [3, 5, 6, 7, 8, 9, 22], "2020": [0, 3, 23], "2022": [7, 22], "2023": 3, "204121": 13, "207": 7, "20x": 29, "20y": 29, "224": 7, "23": 3, "247": 3, "24917": [7, 21], "25": [7, 17], "29": 22, "29661": [7, 22], "29668": [7, 22], "2d": [2, 6, 7, 9, 14, 21, 24, 27], "2l": 22, "2v": 18, "2x2": 20, "3": [2, 6, 7, 8, 12, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 29], "30": [6, 25], "31": 2, "33": 17, "35": 17, "3553717": 7, "36": 17, "37": 7, "3d": [6, 7, 27], "3x1": 6, "3x3": [6, 7], "4": [2, 7, 16, 17, 18, 20, 21, 22, 24], "40": [2, 18], "42": 24, "43": 17, "44": 2, "440": 17, "448": 17, "4655": [3, 7], "48": 2, "4830": 17, "4d": 7, "5": [2, 6, 7, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 29], "50": [7, 19, 20], "500": [21, 25], "5000": 25, "507": 23, "5086105": 13, "517": 23, "56": 17, "58": 2, "5825": 29, "597": 24, "5d": 7, "6": [6, 7, 16, 17, 18, 21, 22, 24, 26], "625": 23, "63": 2, "64": [18, 20, 21, 23], "66": 23, "676580": 0, "686053": 0, "69": 2, "7": [6, 12, 16, 17, 25, 26, 29], "70": [2, 17], "73": 17, "76": 23, "77": 6, "8": [2, 4, 6, 7, 12, 14, 17, 20, 21, 22, 25, 26, 27, 29], "840898": [7, 18], "856": [18, 21], "866": 29, "87": [7, 22], "89": 2, "9": [6, 12, 17, 22, 25], "90": [6, 17], "90x": 29, "95": [23, 25], "96": 7, "97": 25, "A": [6, 7, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26], "AS": [5, 6, 7, 8, 9], "ASE": [6, 9, 14, 18, 21, 22], "As": [19, 22, 24, 25], "But": 25, "By": 22, "For": [0, 2, 6, 7, 8, 12, 14, 15, 19, 20, 22, 23, 25, 26], "If": [0, 6, 7, 8, 9, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 27, 28], "In": [6, 7, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "It": [7, 14, 19, 20, 22, 23, 25], "No": [7, 12, 17, 19, 20, 22], "OF": [5, 6, 7, 8, 9], "OR": [5, 6, 7, 8, 9], "On": [7, 12, 17, 22], "One": [7, 16, 17, 18, 19, 20, 21, 22, 23, 25], "Such": 14, "The": [0, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 29], "Then": [25, 29], "There": [14, 24, 25], "These": [7, 11, 14, 17, 18, 19, 20, 21, 22, 23, 25, 28], "To": [6, 7, 11, 12, 20, 22, 24], "With": [7, 16, 17, 18, 19, 20, 21, 22, 23], "_": [18, 21, 22], "__init__": [16, 17, 18, 19, 20, 21, 22, 23, 25], "_i": [6, 22, 25], "_j": 6, "_k": 21, "a1": 20, "a2": 20, "a3": 20, "a4": 20, "a_": 6, "a_1": 6, "a_2": 6, "a_3": 6, "a_bcc": 29, "a_fcc": 29, "a_featur": 26, "a_max": 21, "a_min": 21, "aalto": 0, "abc": [5, 6, 7, 8], "abdulnour": 7, "abl": [24, 29], "about": [4, 14, 20, 22], "abov": [17, 24], "absolut": [7, 17, 18, 21], "abstract": [7, 8, 29], "ac": 13, "accept": [6, 8], "access": [9, 14, 22, 23], "account": [2, 6, 7, 20, 26], "accur": [7, 17, 22], "accuraci": [7, 15, 22], "achiev": [8, 20, 22, 28, 29], "acquaint": 28, "across": [2, 7, 8, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 26], "acsf": [1, 2, 5, 10, 11, 16, 26], "acsf_wat": 16, "acsfwrapp": [1, 5, 10], "acta": 23, "activ": [22, 25], "actual": 6, "ad": [2, 7, 15, 19, 20, 22, 29], "adam": [3, 7, 22, 25], "add": [6, 7, 17], "add_adsorb": 19, "addit": [0, 2, 7, 8, 12, 15, 16, 19, 20, 22, 26, 29], "addition": [3, 17, 18], "adjac": 9, "adjacency_matrix": 9, "adsoprt": 19, "adsorpt": [7, 22], "advanc": [7, 17, 22, 29], "advantag": 17, "advis": [7, 19, 23], "affect": [25, 29], "after": [7, 16, 17, 18, 19, 20, 21, 22, 23], "again": [25, 26], "against": [7, 15, 24], "agnost": [7, 22], "agre": [5, 6, 7, 8, 9], "agreement": 0, "aip": 3, "al": [7, 18, 19, 21, 22], "al_slic": 19, "albert": [7, 8, 22, 26], "alchem": [7, 8, 22, 26], "alexand": [7, 21], "alexandr": [7, 17], "algebra": [22, 27], "algorithm": [6, 8, 20, 24], "all": [0, 2, 4, 6, 7, 8, 14, 15, 16, 17, 19, 20, 22, 23, 24, 25, 27, 29], "allow": [7, 15, 17, 22, 25], "alpha": [6, 7, 8, 18, 21, 26], "alpha_": [7, 22], "alreadi": 29, "also": [2, 7, 12, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 28, 29], "altern": 7, "although": [12, 22], "aluminum": [19, 21], "alwai": [15, 22, 23], "amount": [7, 9, 16, 17, 18, 19, 20, 21, 22, 23], "amplitud": 22, "an": [2, 5, 6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 28, 29], "analys": 19, "analysi": 11, "analyt": [2, 7, 15, 22, 25], "analyz": [14, 19, 28], "anatol": [7, 17, 21], "andrea": 17, "angl": [6, 7, 19, 20, 23], "angstrom": [6, 7, 16, 19, 20, 22, 23], "angular": [7, 22], "ani": [2, 4, 5, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 25, 26, 29], "annika": 13, "anoth": [6, 18, 29], "answer": 24, "antti": 0, "anywai": 15, "apach": [0, 5, 6, 7, 8, 9], "apart": [17, 20], "appear": 17, "append": [16, 22, 23, 25], "append_ax": 21, "appli": [0, 6, 7, 17, 18, 20, 21, 22, 25, 29], "applic": [5, 6, 7, 8, 9, 15, 20, 28], "apply_constraint": 6, "approach": [8, 15, 20, 22, 26], "approxim": 22, "apr": 20, "apt": 12, "ar": [0, 2, 6, 7, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "archiv": 0, "area": [7, 19, 20], "arg": [5, 7], "arg0": 5, "arg1": 5, "arg10": 5, "arg11": 5, "arg12": 5, "arg13": 5, "arg14": 5, "arg2": 5, "arg3": 5, "arg4": 5, "arg5": 5, "arg6": 5, "arg7": 5, "arg8": 5, "arg9": 5, "argmax": [8, 26], "argmax_": [8, 26], "argsort": 25, "argument": [2, 7, 8, 16, 19, 20, 22, 23], "armiento": [7, 21], "around": [7, 15, 25], "arrai": [2, 6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27], "arrang": [15, 20, 23], "artem": 23, "articl": [3, 11, 13, 14, 18], "arxiv": [20, 23, 26], "ase": [2, 6, 7, 9, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "assess": 25, "assign": 24, "associ": [17, 25], "assum": [6, 8, 9], "astyp": 25, "atom": [2, 6, 7, 8, 9, 11, 14, 15, 17, 18, 19, 20, 21, 23, 24, 25, 26, 28, 29], "atomic_numb": [1, 5, 7, 9, 10, 20], "atomist": [7, 22, 23], "attach": [2, 7, 15], "attempt": 12, "attribut": [2, 7, 16, 17, 18, 19, 20, 21, 22, 23], "augment": 17, "author": [3, 4], "auto": [7, 15], "autoformatt": 4, "autograd": 25, "automat": [4, 7, 12, 19, 22, 23, 25, 29], "avail": [0, 2, 7, 12, 15, 17, 18, 19, 20, 21, 22, 23], "averag": [2, 7, 8, 14, 27], "average_soap": 22, "averagekernel": [1, 5, 10, 26], "awai": [20, 22], "ax": [20, 21, 23, 24, 25], "ax1": 25, "ax2": 25, "axes_grid1": 21, "axi": [7, 19, 20, 21, 22, 24, 29], "b": [6, 7, 8, 19, 20, 21, 22, 26], "b_1": 6, "b_featur": 26, "back": [7, 27], "backend": 7, "background": [7, 18], "backward": 25, "bahlk": 13, "balanc": [15, 22, 25], "band": 20, "bart": [22, 26], "bart\u00f3k": [7, 8], "base": [5, 6, 7, 8, 12, 15, 16, 19, 22, 24, 26, 28], "basi": [2, 5, 6, 7, 8, 9, 22], "basic": [11, 19, 23], "batch": 25, "batch_siz": 25, "bcc": [18, 21, 29], "bcc_featur": 29, "bcc_metric": 29, "becaus": [17, 20, 27], "becom": [2, 7, 15, 20, 26, 27], "been": [2, 7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 23], "befor": [4, 7, 12, 14, 20, 22, 25, 26], "beforehand": [7, 16, 17, 18, 19, 20, 21, 22, 23], "begin": [7, 17, 21, 22, 25], "behavior": 6, "behaviour": [7, 15], "behind": 22, "behler": [7, 16], "being": [2, 29], "below": [4, 7, 12, 17, 22], "benefici": 20, "benefit": [20, 27], "beri": 7, "best": [8, 14, 25, 26], "best_model": 25, "best_valid_loss": 25, "beta": 7, "beta_": [7, 22], "better": [2, 7, 15, 18, 22, 25], "between": [6, 7, 8, 12, 15, 17, 18, 19, 20, 21, 22, 23, 25, 26, 29], "bg": 18, "bias": 24, "biegler": 17, "big_soap": 22, "bigger": [7, 20, 22], "bisbo": 23, "bit": 29, "bj": 23, "black": 4, "blue": 29, "bmatrix": [17, 25], "board": 7, "bodi": [7, 11, 16, 22, 28], "bool": [5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23], "boolean": [7, 8, 9], "bor": [22, 26], "both": [7, 15, 20, 22, 25, 27, 29], "bottom": 25, "bottou": 17, "boundari": [2, 6, 17, 22, 29], "break": 25, "bridg": 19, "bridge_po": 19, "brief": 20, "briefli": 28, "broaden": [7, 19, 20, 23], "build": [14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29], "built": 14, "bulk": [18, 19, 20, 21, 22, 23, 29], "burg": 17, "c": [3, 6, 7, 8, 12, 14, 17, 19, 20, 22, 24, 25, 26, 27], "c1": 21, "c60": 20, "c6cp00415f": [7, 8, 22], "c8cp05921g": 22, "c_": [7, 8, 22, 26], "c_ij": 7, "cach": 6, "calcul": [2, 6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "call": [7, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 27, 28], "callabl": 8, "can": [1, 2, 4, 6, 7, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "cannot": 7, "canova": [3, 7, 22], "captur": 21, "carbon": [17, 20], "care": 19, "carmen": 13, "caro": [7, 22], "cart_coord": 6, "cartesian": [6, 7, 15, 19, 21, 22], "cartesian_po": 6, "cartesian_posit": 24, "case": [7, 12, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29], "categor": 24, "catlow": 7, "caught": 4, "caus": [17, 18, 21], "cax": 21, "cbar": 21, "cc": 17, "cd": 12, "cdot": [21, 22, 25], "cell": [2, 6, 7, 9, 14, 18, 20, 22, 23, 24], "celldisp": 6, "celllist": [1, 5, 10], "celllistresult": [1, 5, 10], "center": [2, 6, 7, 9, 11, 15, 17, 19, 22, 25, 28], "central": [7, 16, 19, 22], "ceriotti": [7, 8, 22, 26], "certain": [6, 9, 24], "cest": 0, "ch3oh": 22, "chain": 20, "chang": [2, 7, 17, 19, 20, 22, 24], "channel": [14, 26], "charg": [6, 7, 17, 18], "check": [2, 4, 7, 11, 15, 19, 22, 23, 25], "check_geometri": [1, 5, 7], "check_grid": [1, 5, 7], "check_weight": [1, 5, 7], "chem": [7, 8, 16, 22, 26], "chemic": [3, 7, 9, 13, 14, 16, 19, 20, 22, 23, 24, 27, 28], "chemistri": [7, 13, 21, 22], "chi": 22, "chi2": 8, "choic": [22, 25], "choos": 26, "chosen": [7, 20, 25], "christian": 13, "ci": 4, "cibuildwheel": 12, "cij": 7, "cl": [20, 23], "clariti": 23, "class": [4, 5, 6, 7, 8, 9, 14, 20, 22, 24, 25, 26, 27], "classifi": 19, "clearli": 29, "clip": 21, "clone": 12, "close": 8, "closer": [19, 22], "closest": 6, "cluster": [14, 20, 28, 29], "cm": [17, 24], "cm_methanol": 17, "cmap": 24, "co": 23, "co2": [17, 22, 27], "code": [1, 2, 7, 11, 12, 16, 20, 21, 22, 25], "coef0": 8, "coeffici": [7, 8, 22], "color": [2, 21, 24, 25], "color_axi": 21, "colorbar": 21, "colour": [24, 29], "column": [7, 17, 18, 21], "com": 12, "combin": [2, 7, 20, 22, 29], "combined_featur": 29, "come": 20, "command": 12, "commit": 4, "common": [7, 19, 20, 22, 24], "commun": [3, 7, 12], "compact": 17, "compar": [7, 8, 17, 19, 22, 23, 25, 26, 27], "comparison": [23, 26], "compat": 12, "compil": 12, "complet": [2, 7, 15, 17, 20, 22], "complex": [6, 9, 22, 28], "complianc": [5, 6, 7, 8, 9], "compliant": 4, "complic": [22, 25, 29], "compon": [7, 15], "compos": 16, "comprehens": 13, "compress": [2, 5, 7, 22, 26], "comput": [0, 3, 7, 8, 14, 15, 18, 19, 20, 21, 22, 23, 25], "computation": 22, "concaten": 7, "concept": 28, "condens": 22, "condit": [2, 5, 6, 7, 8, 9, 17, 22], "configur": [2, 7, 8, 14, 22], "confirm": 17, "conftest": 4, "confus": 27, "connect": [7, 25], "consid": [3, 6, 7, 9, 16, 19, 24], "consider": 22, "consist": [2, 23], "consol": [7, 16, 17, 18, 19, 20, 21, 22, 23], "constant": [7, 14, 18, 22], "constraint": 6, "construct": [7, 9, 16, 20, 22], "constructor": [7, 8, 15, 16, 17, 18, 19, 20, 21, 22], "consum": 6, "contact": [4, 13], "contain": [6, 7, 9, 12, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 29], "content": [1, 10, 14], "contour": 21, "contourf": 21, "contribut": [2, 19, 20, 22, 25, 26], "control": [7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 23], "conveni": [14, 15, 25, 27], "convent": 20, "converg": [7, 8, 18, 20, 23], "convers": [6, 18], "convert": [7, 15, 18, 27], "coo": [7, 14, 16, 17, 18, 20, 21, 22, 23, 27], "coo_matrix": [6, 7, 9], "coord": 6, "coordin": [6, 7, 9], "copi": [5, 6, 7, 8, 9, 19, 20, 21], "copper": [22, 24], "copyright": [5, 6, 7, 8, 9], "core": [1, 5, 10, 14, 18], "correct": [7, 18, 22, 24, 25], "correctli": [12, 19, 21, 24], "correl": [7, 23], "correpond": 9, "correspond": [6, 7, 9, 17, 18, 19, 20, 22, 23, 29], "cosin": [7, 19, 20], "cost": [7, 21, 22], "could": [12, 19, 22, 24, 29], "coulomb": [7, 11, 18, 19, 20, 21, 26, 28], "coulomb_matric": [17, 22], "coulombmatrix": [1, 2, 5, 10, 17], "count": [7, 16, 17, 18, 19, 20, 21, 22, 23], "counter": 22, "counteract": 7, "counterpart": 17, "coupl": 13, "cours": 25, "courtesi": 2, "cover": [9, 14, 25, 28], "cpc": 3, "cpu": [7, 16, 17, 18, 19, 20, 21, 22, 23], "creat": [1, 2, 4, 5, 6, 7, 8, 9, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "create_graph": 25, "create_parallel": [5, 7], "create_singl": [5, 7], "creation": 7, "critcat": 0, "criteria": 18, "criterion": 25, "crop": 17, "cross": [7, 14, 22], "crossov": [2, 7, 22], "crystal": [6, 7, 18, 20, 22, 23], "crystallograph": 6, "crystallographi": 23, "crystallographica": 23, "csc": 27, "csr": 27, "csr_matrix": [7, 19], "cs\u00e1nyi": [7, 8, 22], "cu": [22, 24], "cubic": [20, 21, 22, 29], "curran": 17, "current": [7, 11, 20, 22], "custom": [8, 15, 16, 19, 25, 29], "cut": [7, 19, 20, 22], "cutoff": [6, 7, 9, 16, 18, 19, 20, 22, 23], "cython": 2, "d": [6, 7, 9, 21, 22, 24, 25], "d_1": 25, "d_2": 25, "d_numpi": 25, "d_train": 25, "d_train_batch": 25, "d_train_ful": 25, "d_valid": 25, "d_whole": 25, "darbi": [7, 22], "data": [6, 7, 9, 17, 19, 20, 22, 23, 24, 25, 29], "dataset": [14, 17], "david": 3, "dbscan": 24, "dd_dr": 25, "dd_dr_numpi": 25, "dd_dr_train": 25, "dd_dr_train_batch": 25, "dd_dr_train_ful": 25, "dd_dr_valid": 25, "dd_dr_whole": 25, "de": [7, 8, 22, 26], "deal": 7, "decai": [7, 19, 20, 22, 23], "decid": 15, "declaremathoper": [8, 26], "def": [25, 29], "default": [6, 7, 8, 9, 12, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25], "defin": [2, 6, 7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 25, 26, 29], "definit": 22, "degre": [6, 7, 8, 19, 20, 22, 23], "delta": 23, "demonstr": [17, 18, 19, 20, 21, 22, 23, 27, 28, 29], "dens": [7, 15, 16, 17, 18, 19, 20, 21, 22, 23, 27], "densiti": [2, 7, 20, 22], "depart": 0, "depend": [4, 7, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 26], "deprec": 2, "deriv": [2, 3, 5, 7, 11, 14, 25, 27, 28], "derivatives_analyt": [1, 5, 7, 10], "derivatives_numer": [1, 5, 7, 10], "derivatives_parallel": [5, 7], "derivatives_shap": 7, "derivatives_singl": [5, 7], "desc": [20, 26], "descend": [7, 17, 18, 21], "desciptor": [7, 24, 25], "describ": [6, 19], "descriptor": [1, 2, 3, 4, 5, 6, 10, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27], "descriptor_shap": 7, "descriptorglob": [1, 4, 5, 10], "descriptorloc": [1, 4, 5, 10], "descriptormatrix": [1, 5, 10], "design": [17, 25], "detach": 25, "detail": [1, 2, 7, 11, 14, 22], "detect": 16, "determin": [6, 7, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 29], "dev": 12, "develop": [0, 4, 5, 6, 7, 8, 9, 12, 17], "deviat": [7, 17, 18, 19, 20, 21, 22, 23], "devrequir": 4, "df_dd_train_batch": 25, "df_dd_valid": 25, "df_dd_whole": 25, "diagon": [7, 17, 18], "dict": [5, 6, 7, 9, 19, 20, 22], "dictat": [7, 18], "dictionari": [7, 9, 22], "differ": [2, 6, 7, 9, 14, 15, 17, 18, 19, 20, 22, 23, 24, 26, 29], "difficult": 20, "dimens": [2, 7, 14, 15, 16, 17, 18, 19, 21, 22, 25], "dimension": [1, 2, 5, 7, 10, 14, 15, 16, 17, 27], "dinstinct": 24, "direct": [2, 6, 7, 9, 20], "directli": [0, 7, 18, 19, 20, 22, 25, 26, 29], "directori": 12, "discret": [7, 19, 20, 23], "discuss": [0, 4, 22], "disk": [24, 25, 27], "displac": 6, "displai": 17, "dist": [6, 29], "dist_max": 29, "distanc": [1, 5, 6, 7, 9, 10, 19, 20, 22, 23, 25, 29], "distances_squar": [1, 5, 10], "distinguish": [7, 22, 25], "distribut": [2, 5, 6, 7, 8, 9, 12, 17, 18, 19, 20, 21], "divers": 13, "divid": [7, 8, 20], "do": [4, 7, 15, 17, 20, 22, 24, 25, 27, 28, 29], "doc": 4, "docstr": 1, "document": [1, 2, 4, 8, 11, 14, 15, 22], "doe": [7, 16, 17, 18, 19, 20, 22, 25, 29], "doesn": 23, "doi": [3, 7, 8, 13, 17, 18, 21, 22], "dok_matrix": [6, 9], "domain": [22, 25], "domin": [20, 22], "done": [12, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], "dot": 25, "doubl": [7, 19, 20, 22, 23], "dramat": [7, 22], "draw": [7, 17, 18, 21], "driven": [7, 22], "drop": [7, 19, 20], "dscribe": [1, 4, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "dscribe2": 3, "dsribe": 4, "dtype": [7, 9, 16, 18, 19, 20, 21, 22, 23], "due": [20, 22, 23, 27], "duplic": 9, "dure": [7, 12, 15], "dynam": [7, 24], "e": [6, 7, 8, 12, 14, 15, 18, 19, 20, 21, 22, 24, 25, 26, 27, 29], "e_numpi": 25, "e_pr": 25, "e_train": 25, "e_train_batch": 25, "e_train_ful": 25, "e_train_pred_batch": 25, "e_valid": 25, "e_valid_pr": 25, "e_whol": 25, "e_whole_pr": 25, "each": [6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27, 28, 29], "earli": 25, "easi": [22, 26, 29], "easier": 22, "easiest": 18, "easili": [15, 20, 22], "editor": 17, "effect": [7, 15, 16, 17, 18, 19, 20, 23, 24, 25], "effici": [6, 7, 14, 15, 27], "eiaki": [3, 7, 22], "eigenspectrum": [7, 17, 18, 21], "eigenvalu": [7, 17, 18, 21], "einsum": 25, "either": [5, 6, 7, 8, 9, 14, 15, 18, 19, 20, 22, 27], "ek": 7, "electron": 0, "electrostat": [7, 17], "element": [2, 7, 8, 9, 14, 16, 17, 18, 19, 20, 21, 22, 23], "element_symbol": 9, "els": [6, 9, 25], "em": 18, "emploi": 2, "ems_out": 18, "enabl": 22, "encod": [7, 17, 19, 20, 21, 22], "encount": [0, 7, 16, 19, 20, 22, 23], "end": [7, 17, 21, 22, 25], "energi": [7, 13, 17, 20, 21, 25], "energy_force_loss": 25, "energy_loss": 25, "enhanc": [7, 22, 23], "enough": 14, "ensur": [0, 4, 7, 17, 22], "enter": 25, "entir": [25, 26], "entri": [6, 7, 9, 21, 22, 27], "entrop": 8, "entropi": 8, "enumer": [21, 25], "environ": [7, 8, 14, 16, 19, 22, 25, 28], "epoch": 25, "epsilon": 25, "epsilon_0": 18, "equal": [17, 18, 20, 21, 22, 24, 25], "equat": [17, 18, 21, 25], "equival": [6, 22], "equivalent_atom": 6, "error": [12, 17, 18, 21, 25], "esm": 18, "especi": [20, 22, 28], "essenti": [6, 7, 17, 19, 20, 22, 24], "estim": 20, "et": [7, 22], "eta": [7, 16], "etc": [11, 14, 25, 29], "euclidean": [7, 17, 19, 20, 29], "european": 0, "ev": [18, 25], "eval": 25, "evalu": [7, 15, 25], "even": [22, 24], "ever": [7, 16, 19, 20, 22, 23], "everi": [15, 17], "ewald": [7, 11, 17, 28], "ewald_1": 18, "ewald_2": 18, "ewald_3": 18, "ewald_matric": 18, "ewaldsummatrix": [1, 2, 5, 10, 18], "exact": [9, 14], "exactli": [7, 22, 25], "examin": 24, "exampl": [6, 7, 11, 14, 24, 25, 26, 27, 28, 29], "except": [2, 5, 6, 7, 8, 9, 20], "exchang": 13, "exclud": [7, 15], "exist": 4, "exot": 12, "exp": [7, 19, 20, 22, 23, 29], "expand": [7, 22], "expans": 22, "expect": [14, 22], "expens": [7, 18], "experi": [12, 14, 22, 28], "experienc": 12, "explicitli": [7, 22, 25], "explor": 11, "expon": 7, "exponenti": [7, 8, 19, 20], "express": [5, 6, 7, 8, 9], "ext": [1, 10], "extend": [5, 7, 9], "extend_system": [1, 5, 10], "extendedsystem": [1, 5, 10], "extens": [4, 7, 12, 18, 20], "extern": 27, "extract": [1, 19], "f": [7, 17, 19, 20, 22, 23, 25, 29], "f_": [7, 19, 20], "f_numpi": 25, "f_pred": 25, "f_train": 25, "f_train_batch": 25, "f_train_ful": 25, "f_train_pred_batch": 25, "f_valid": 25, "f_valid_pr": 25, "f_whole": 25, "f_whole_pr": 25, "f_x_train_ful": 25, "f_x_whole": 25, "f_x_whole_pr": 25, "faber": [7, 21], "face": 12, "fact": 20, "factor": [6, 7, 8, 19, 20], "fairli": 29, "fall": 6, "fals": [6, 7, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27], "far": [20, 22], "farther": 22, "fashion": 20, "fast": [7, 17], "faster": [7, 9, 14, 15, 22, 25], "fastest": 25, "fatal": 12, "fazli": 17, "fcc": [6, 18, 19, 20, 21, 22, 24, 29], "fcc111": [19, 24], "fcc_featur": 29, "fcc_metric": 29, "fcc_po": 19, "fcoord": 6, "fe": [18, 21, 29], "featur": [2, 7, 8, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "feature_vector": 14, "fed": 7, "federici": [3, 7, 22], "feed": [14, 20, 25], "feel": 17, "felix": [7, 21], "few": [24, 28], "fewer": 17, "ffnet": 25, "field": [2, 15, 28], "fifth": 7, "fig": [20, 21, 23, 24, 25], "figsiz": [21, 24, 25], "figur": [21, 29], "file": [5, 6, 7, 8, 9, 12], "filippo": [3, 7, 22], "fill": [7, 29], "final": [7, 8, 17, 18, 21], "find": [1, 6, 11, 12, 14, 24, 25, 28, 29], "fine": 25, "fingerprint": [7, 11, 16, 19, 23], "finish": 25, "finit": [7, 15], "first": [4, 6, 7, 9, 14, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26], "fit": [17, 22, 24, 25], "five": [2, 15], "fix": [2, 6, 7, 11, 14, 24], "flag": 6, "flatten": [2, 7, 18, 20, 21], "flip": 17, "float": [5, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23, 25], "float32": [7, 19, 20, 22, 23], "float64": [5, 7, 16, 18, 19, 20, 21, 22, 23], "folder": 4, "follow": [4, 6, 7, 11, 12, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27], "fontsiz": 25, "foral": 18, "forc": [2, 15, 28], "force_loss": 25, "forces_and_energi": 25, "forg": 12, "fork": 4, "form": [6, 7, 19, 20, 21, 22, 24, 29], "formal": [20, 22], "format": [4, 7, 14, 20, 21, 24, 25, 27], "format_arrai": [5, 7], "forum": 0, "forward": 25, "foster": [3, 7, 22], "found": [4, 11, 25], "foundat": [0, 23], "four": [2, 15, 19, 22], "fourth": 7, "frac": [6, 7, 8, 17, 18, 21, 22, 25, 26], "frac_point": 6, "fraction": 6, "fractional_coord": 6, "framework": [4, 19, 23], "franziska": 17, "free": 17, "freedom": 22, "from": [0, 1, 2, 4, 6, 7, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 29], "from_atom": [5, 6], "full": [11, 25, 26, 29], "fullfil": 4, "fulli": 25, "func": 7, "function": [2, 4, 5, 7, 8, 11, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 27, 28, 29], "further": 24, "furthermor": 17, "f\u00e9lix": 22, "g": [6, 7, 8, 12, 14, 15, 16, 20, 22, 24, 26, 27, 29], "g1": 16, "g2": [7, 16], "g2_param": [1, 5, 7, 10, 16], "g3": [7, 16], "g3_param": [1, 5, 7, 10, 16], "g4": [7, 16], "g4_param": [1, 5, 7, 10, 16], "g5": [2, 7, 16], "g5_param": [1, 5, 7, 10, 16], "g_": [7, 22], "g_cut": [7, 18], "g_k": 20, "g_max": 2, "gamma": [8, 26], "gao": 3, "gap": 20, "gather": [9, 14], "gaussian": [2, 7, 8, 13, 17, 18, 19, 20, 21, 22, 23, 26], "gcut": 2, "gener": [0, 4, 6, 7, 14, 15, 22, 26, 28, 29], "geometri": [1, 2, 5, 7, 10, 14, 19, 22, 23, 29], "ger": [3, 22], "get": [2, 6, 7, 11, 14, 17, 25, 28], "get_adjacency_list": [1, 5, 9], "get_adjacency_matrix": [1, 5, 9], "get_atomic_numb": [1, 5, 9], "get_basis_gto": [5, 7], "get_basis_poli": [5, 7], "get_cartesian_coord": [5, 6], "get_cel": 24, "get_cell_invers": [5, 6], "get_chemical_symbol": [14, 17], "get_cmap": 24, "get_cutoff_pad": [5, 7], "get_displacement_tensor": [5, 6], "get_distance_matrix": [5, 6], "get_distance_matrix_within_radiu": [5, 6], "get_eigenspectrum": [5, 7], "get_extended_system": [1, 5, 9], "get_forc": 25, "get_fractional_coord": [5, 6], "get_global_similar": [5, 8], "get_inverse_distance_matrix": [5, 6], "get_k1": [1, 5, 10], "get_k2": [1, 5, 10], "get_k2_loc": [1, 5, 10], "get_k3": [1, 5, 10], "get_k3_loc": [1, 5, 10], "get_loc": [5, 7, 19, 20, 22, 23], "get_matrix": [5, 7], "get_neighbours_for_index": [1, 5, 10], "get_neighbours_for_posit": [1, 5, 10], "get_number_of_featur": [1, 5, 7, 10, 16, 17, 18, 19, 20, 21, 22, 23], "get_pairwise_matrix": [5, 8], "get_pbc": 22, "get_points_in_spher": [5, 6], "get_posit": [19, 24], "get_total_energi": 25, "ghosh": 13, "ghost": 17, "gil": 7, "git": 12, "github": [0, 4, 11, 12, 25], "give": [15, 22, 29], "given": [2, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23], "global": [2, 7, 8, 15, 17, 22, 23, 26], "go": [7, 16, 19, 20, 22, 23], "goal": [24, 29], "goe": [7, 22, 26], "goir": 17, "good": [4, 15, 17], "googl": 4, "govern": [5, 6, 7, 8, 9], "gr": 17, "grad": 25, "grad_output": 25, "gradient": 25, "grain": 29, "grant": 0, "graph": [20, 23], "great": 28, "gregoir": 7, "grid": [5, 7, 19, 20, 21, 23, 24, 29], "group": [0, 6, 24], "grow": 15, "gto": [2, 7, 22], "guess": 7, "guid": 4, "g\u00e1bor": [7, 8], "h": [7, 12, 16, 17, 19, 20, 22, 23, 25, 26, 27], "h2o": [14, 16, 17, 19, 20, 22, 26, 27], "h2o2": [22, 26], "ha": [0, 2, 7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 23], "hammer": 23, "hand": 17, "handl": [7, 14, 17, 18, 21, 24], "hansen": 17, "haoyan": 20, "harmon": [7, 22], "hat": [21, 25], "have": [2, 7, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28], "hcp": 19, "hcp_po": 19, "he": 6, "heavili": [7, 19, 20, 23], "help": [20, 22, 28], "henc": [7, 22], "henrietta": 3, "here": [1, 7, 11, 15, 20, 21, 23, 24, 25, 26, 29], "herrmann": 13, "hexagon": 6, "hh": 25, "hh_loc": 22, "hidden": 25, "hide": [7, 22], "high": [7, 16], "highest": [9, 20], "himanen": [3, 7, 13, 22], "ho_loc": [20, 22], "holder": 17, "homm": 3, "honor": 6, "hook": 4, "horizon": 0, "horizontalalign": 25, "how": [2, 6, 7, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 29], "howev": [15, 17, 18, 19, 20, 21, 22, 23, 29], "hspace": 25, "http": [3, 5, 6, 7, 8, 9, 12, 17, 18, 22], "huo": 20, "hydrogen": [7, 16, 17, 22], "i": [0, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "i_atom": 21, "i_epoch": 25, "i_si": 21, "i_sm": 21, "i_speci": [20, 23], "i_wors": 25, "idea": [4, 22, 29], "ideal": 7, "ident": [7, 16, 19, 20, 23, 25, 29], "identifi": [16, 19, 20], "idx": 25, "ignor": [6, 7, 8, 17, 19, 20], "ii": [6, 8, 21], "iii": 6, "iiint_": 22, "ij": [6, 7, 8, 17, 18, 19, 20, 21, 26], "ijk": 25, "ijkl": 25, "ik": [7, 19, 20], "il": 25, "illustr": [20, 21], "imag": [6, 17, 29], "imagin": 17, "imaginari": 22, "imperfect": 29, "implement": [2, 4, 7, 15, 22, 23, 25, 27], "impli": [5, 6, 7, 8, 9], "import": [14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29], "improv": [0, 2, 25], "inc": 17, "includ": [2, 6, 7, 9, 11, 13, 15, 16, 20, 22, 28], "inclus": 16, "incorrectli": 2, "increas": [2, 16, 22], "ind": 6, "independ": [7, 15, 22], "index": [6, 7, 9, 15, 16, 17, 20, 23], "indic": [1, 5, 7, 9, 10, 15, 16, 19, 22, 25], "indirectli": [7, 19, 20], "individu": [7, 16, 19, 20, 22, 23, 26], "inf": 25, "infin": 8, "infinit": 21, "influenc": [7, 18, 19, 20, 23], "info": 6, "inform": [7, 11, 14, 17, 18, 19, 24], "infti": 26, "inherit": [4, 6], "init": [12, 25], "init_derivatives_arrai": [5, 7], "init_descriptor_arrai": [5, 7], "init_internal_arrai": [5, 7], "init_internal_dev_arrai": [5, 7], "initi": [7, 25], "inn": [7, 22], "inner": [7, 22], "innov": 0, "inp": 7, "input": [2, 6, 7, 8, 14, 16, 19, 20, 22, 24, 25], "inquir": 7, "insid": 6, "insight": 26, "instal": [4, 25], "instanc": [17, 22], "instanti": [7, 14, 16, 17, 18, 19, 20, 21, 22, 23], "instead": [2, 7, 15, 17, 18, 22, 23], "instruct": [2, 4], "int": [5, 7, 9, 16, 17, 18, 19, 20, 21, 22, 23, 25], "int32": 5, "integ": [7, 9, 20], "integr": 22, "intens": 20, "interact": [7, 17, 18, 19, 20, 22, 25], "interatom": [7, 22], "interest": [7, 14, 22, 29], "interfac": [0, 2, 29], "intern": [6, 7, 21], "interper": 7, "interpret": [4, 7, 8, 20, 21], "interv": 22, "introduc": [2, 17, 28], "introduct": 17, "intuit": 17, "inv_matrix": [5, 6], "invalid": 7, "invari": [7, 18, 21], "invers": [6, 7, 19, 20], "inverse_dist": [7, 19, 20], "inverse_squar": [7, 19, 20, 23], "invis": 7, "involv": [7, 19, 20, 23, 25], "io": [14, 29], "iron": 29, "is1d": [1, 5, 9], "is2d": [1, 5, 9], "issn": 3, "issu": [0, 2, 18, 20], "item": [7, 22, 23, 25], "iter": [7, 8, 9, 16, 19, 20, 22, 23], "ith": 9, "its": [7, 19, 20, 22], "itself": [6, 7, 17, 29], "iv": 6, "ix": 21, "j": [3, 6, 7, 8, 16, 17, 18, 20, 21, 22, 23], "j_speci": [20, 23], "jackson": 7, "jan": 17, "jarnlaak": 2, "jarno": 3, "jenni": 0, "jj": 8, "jlparki": 2, "job": [7, 15, 16, 17, 18, 19, 20, 21, 22, 23], "joblib": 7, "john": 7, "jone": 25, "jonni": 13, "journal": [3, 7, 13, 21], "jpca": 13, "jr": 7, "just": [6, 17], "j\u00e4ger": 7, "j\u00f6rg": 7, "k": [6, 7, 8, 9, 17, 19, 20, 21, 22, 23, 24, 25, 26], "k2": 23, "k_": 8, "kappa": [7, 16], "katja": 17, "keep": [6, 7, 16, 17, 19, 20, 22, 23], "kei": [7, 19, 20, 22, 23, 28], "kermod": [7, 22], "kernel": [1, 5, 10, 13, 20, 22, 28], "kernel_param": 8, "keyword": [7, 8], "kind": [5, 6, 7, 8, 9, 19, 20, 26], "kindli": 25, "klau": [7, 17], "know": [20, 25, 29], "knowledg": 14, "known": 29, "kondor": [7, 22], "kunal": 13, "kunkel": 13, "kwarg": [5, 7], "l": [7, 17, 22], "l2": [7, 17, 18, 19, 20, 21], "l2_each": 20, "l_": 22, "l_max": [2, 7, 14, 22, 24, 25, 26, 27], "laakso": 3, "label": [19, 20, 24, 25], "labels_": 24, "lambda": [7, 16], "landmark": 29, "languag": [5, 6, 7, 8, 9], "laplacian": 8, "larg": [2, 7, 15, 18, 27, 29], "larger": [20, 29], "last": [7, 15, 25, 29], "later": [14, 24, 25], "latest": 12, "latter": 22, "lattic": [1, 5, 10, 21], "lauri": [3, 7, 13, 22], "law": [5, 6, 7, 8, 9], "layer": 25, "layout": [2, 7], "lazili": 6, "lead": 22, "leak": 2, "lear": 20, "learn": [3, 7, 8, 11, 14, 15, 17, 19, 20, 21, 22, 23, 26], "least": [7, 29], "leav": [7, 22], "left": [7, 8, 17, 18, 21, 22, 25], "legend": [19, 20, 23, 24, 25], "legend_el": 24, "len": [6, 20, 23, 25, 29], "length": [5, 6, 7, 19, 20, 22], "length_of_b_1": 6, "lengthen": 23, "lennard": 25, "lennardjon": 25, "leq": [7, 22], "let": [14, 17, 18, 22, 24, 25, 26, 27, 29], "lett": [7, 17], "level": 21, "li": [17, 22], "librari": [2, 3, 11, 14, 15, 27], "licens": [5, 6, 7, 8, 9], "lie": 6, "life": 28, "like": [7, 15, 17, 20, 22, 23, 24, 25, 29], "likewis": 17, "lilienfeld": [7, 17, 21], "limit": [5, 6, 7, 8, 9], "linalg": 29, "lindmaa": [7, 21], "line": [12, 17, 25], "linear": [8, 22, 25, 26, 27], "linear1": 25, "linear2": 25, "linearli": [7, 22], "linestyl": 25, "linewidth": [21, 25], "linspac": [19, 20, 21, 23, 24, 25], "linux": [2, 12], "list": [2, 5, 7, 8, 9, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "listedcolormap": 24, "littl": [7, 18], "lj": 25, "ll": [7, 22], "ller": 17, "lm": [7, 22], "lmax": 2, "lmbtr": [1, 2, 5, 10, 11, 19, 29], "ln": [8, 26], "load": [24, 25, 27], "load_npz": 27, "load_state_dict": 25, "loc": [20, 23], "local": [2, 7, 8, 11, 12, 14, 15, 16, 22, 28], "localkernel": 8, "localsimilaritykernel": [1, 5, 10], "locat": [7, 15, 19, 24], "lock": 7, "log": [6, 7, 9, 19, 20], "logic": 18, "loki": 7, "long": [7, 22, 25], "longer": [22, 25], "look": [6, 15, 17, 23, 24, 25, 29], "loop": [15, 17, 25], "lose": 17, "loss": 25, "low": [7, 16, 19, 20, 21, 22, 23], "lower": [17, 18, 21], "lowest": 9, "lr": 25, "lvert": [6, 21, 22], "m": [7, 8, 17, 22, 24, 26], "m_": [17, 21], "m_ij": 7, "machin": [3, 7, 11, 14, 15, 17, 19, 20, 21, 22, 23, 25], "maco": [2, 12], "made": [2, 13, 15], "mae": 25, "mae_energi": 25, "mae_forc": 25, "magmom": 6, "magnet": [7, 22], "mai": [5, 6, 7, 8, 9, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "main": [7, 19, 22, 27], "major": 25, "make": [2, 7, 19, 20, 22, 25, 26], "make_axes_locat": 21, "malth": 23, "mani": [6, 7, 11, 16, 17, 18, 21, 22, 23, 25, 27, 28, 29], "manifold": 24, "manipul": 14, "manual": 22, "manual_se": 25, "map": [2, 7, 8, 20, 22, 23, 28, 29], "marc": [3, 7, 13, 22], "mario": 23, "mark": 7, "marker": 25, "mass": 6, "match": [7, 8, 22, 26], "mater": [7, 22], "materi": [3, 11, 14, 20, 22], "math": [18, 23], "mathbf": [6, 8, 21, 22, 25, 26], "mathcal": [8, 22, 26], "mathrm": [7, 8, 17, 21, 22, 26], "matplotlib": [19, 20, 21, 23, 24, 25], "matric": [2, 6, 17, 18, 21, 27], "matrix": [5, 6, 7, 8, 9, 11, 16, 19, 20, 22, 23, 26, 28], "matter": [17, 22], "matthia": [7, 13, 17, 20], "max": [7, 19, 20, 21, 22, 23, 24, 29], "max_atomic_numb": 9, "maximum": [7, 9, 17, 18, 19, 20, 21, 22], "maxval": 21, "maxwidth": 29, "mbtr": [1, 2, 5, 10, 11, 16, 19, 20, 22, 26], "mbtr_nacl": 23, "mbtr_output": [20, 23], "mbtr_water": [19, 20], "mbtrwrapper": [1, 5, 10], "mean": [7, 14, 15, 19, 20, 24, 25, 26, 27], "mean_absolute_error": [24, 25], "meaning": [20, 22, 24, 29], "measur": [7, 8, 14, 24, 26, 28, 29], "memori": [2, 7, 28], "mention": 25, "meshgrid": 24, "methanol": [17, 22], "method": [7, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 28], "metric": [8, 22, 24, 25, 26, 29], "michael": 22, "michel": [7, 8, 22, 26], "migrat": 2, "milica": [3, 13], "mimic": 17, "min": [7, 19, 20, 21, 23, 29], "min_atomic_numb": 9, "min_dist": 9, "minibatchkmean": 24, "minimum": [6, 7, 9, 19, 20], "mirror": 17, "mislead": 17, "miss": 2, "mix": 19, "ml": 28, "mode": [2, 7, 22, 26], "model": [7, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25], "model_select": [24, 25], "modif": [4, 19], "modul": [1, 4, 10, 25], "mogo": 13, "mol": 7, "molecul": [7, 8, 14, 16, 17, 19, 20, 22, 26, 27], "molecular": [7, 13, 17], "momenta": 6, "monolith": 7, "montavon": [7, 17], "more": [1, 2, 7, 8, 11, 12, 14, 17, 19, 22, 25, 26, 29], "morooka": [3, 7, 22], "most": [6, 7, 15, 20, 24], "mostli": 27, "motif": 20, "motiv": [2, 7, 19, 20], "move": [6, 7, 14, 15], "moveaxi": 15, "mpl": [19, 20, 21], "mpl_toolkit": 21, "mse": 25, "mu": [7, 19, 20, 22], "mu1nu1": [7, 22], "mu2": [7, 22], "much": [7, 9, 15, 17, 18, 21, 22, 25, 28, 29], "mueller": 7, "multi": 14, "multipl": [2, 6, 7, 15, 16, 17, 18, 19, 20, 21, 22], "multipli": [7, 9, 20, 22], "musil": [7, 22], "must": [7, 22], "m\u00fcller": 17, "n": [2, 6, 7, 8, 9, 16, 18, 19, 20, 21, 22, 23, 24, 26, 27, 29], "n_": [7, 20, 22], "n_atom": [7, 15, 17, 18, 20, 21, 25, 29], "n_atoms_max": [7, 9, 17, 18, 21], "n_center": [7, 15], "n_cluster": 24, "n_cpu": [7, 16, 17, 18, 19, 20, 21, 22, 23], "n_elem": 7, "n_element": [20, 23], "n_feat1": 22, "n_feat2": 22, "n_featur": [7, 15, 16, 19, 20, 22, 23, 24, 25], "n_g2": [1, 5, 10], "n_g3": [1, 5, 10], "n_g4": [1, 5, 10], "n_g5": [1, 5, 10], "n_hidden": 25, "n_indic": 7, "n_job": [7, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "n_max": [2, 7, 14, 22, 24, 25, 26, 27], "n_max_atom": 7, "n_max_epoch": 25, "n_out": 25, "n_posit": [16, 19, 20, 22, 23], "n_sampl": [24, 25], "n_system": 7, "n_train": 25, "n_type": [1, 5, 7, 10], "n_type_pair": [1, 5, 10], "n_xy_bcc": 29, "n_xy_fcc": 29, "n_z": 29, "na": [20, 23], "nabla_": 25, "nacl": [18, 20, 21, 23], "nacl_ewald": 18, "nacl_sin": 21, "name": [11, 19, 27], "nanoclust": [7, 22], "nanoscal": 0, "napoleon": 4, "natnael": 13, "natur": 22, "ndarrai": [5, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23], "necessari": 22, "need": [2, 6, 7, 12, 14, 15, 17, 18, 20, 21, 25, 26, 27], "neg": [7, 16, 17, 18, 19, 20, 21, 22, 23, 25], "neighbour": [9, 16], "neighbourhood": [7, 22], "neighour": 7, "neq": [17, 18, 21], "net": 7, "network": [7, 16, 25], "neural": [7, 16, 17, 25], "neutral": [7, 18], "new": [2, 3, 4, 7, 9, 11, 14, 15], "newest": 12, "newposit": 6, "next": 29, "nip": [7, 17], "nl": [7, 22], "nlm": [7, 22], "nmax": 2, "nn": [7, 22, 25], "no2": [17, 22], "node": 9, "nois": [7, 17, 18, 20, 21, 29], "nomad": 0, "non": [2, 7, 13, 17, 18, 22, 23, 27], "none": [5, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 25], "norm": [7, 17, 18, 20, 21, 29], "normal": [2, 5, 7, 8, 17, 18, 19, 21, 22, 23, 26], "normal_": 25, "normalis": 20, "normalize_gaussian": [7, 19, 20, 23], "normalize_kernel": 8, "note": [2, 6, 7, 14, 17, 18, 21, 23], "noteworthi": 20, "noth": 22, "notic": [7, 14, 15, 16, 18, 19, 20, 21, 22, 23, 25], "novel": 23, "now": [2, 7, 22, 25], "np": [6, 7, 8, 9, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29], "npj": [7, 22], "npy": [24, 25], "npz": 27, "nu": [7, 22], "nuber": [7, 17, 18, 21], "nuclear": 17, "nuclei": 17, "number": [0, 2, 3, 6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26], "numer": [2, 7, 11, 14, 15, 26], "numpi": [5, 6, 7, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29], "nxm": 8, "nxmax": 6, "nyi": [22, 26], "o": [3, 6, 7, 9, 14, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27], "object": [6, 7, 8, 14, 17, 18, 21, 22], "obtain": [5, 6, 7, 8, 9], "off": [7, 17, 18, 22, 26, 27], "often": [11, 14], "oganov": [2, 7, 11, 20, 28], "oj": 3, "old_valid_loss": 25, "onc": [2, 14, 25, 26], "one": [2, 6, 7, 14, 15, 17, 18, 20, 21, 22, 24, 25, 29], "ones": 14, "ones_lik": 25, "onli": [2, 6, 7, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "only_physical_cor": [7, 16, 17, 18, 19, 20, 21, 22, 23], "ontop": 19, "ontop_po": 19, "onward": 27, "opac": 29, "open": 14, "opinion": 24, "opt": 15, "optim": [7, 22, 23, 24, 25], "option": [2, 6, 7, 8, 9, 14, 15, 18, 19, 20, 21, 22, 23], "orbit": [7, 13, 22], "order": [2, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23, 25, 27], "org": [3, 5, 6, 7, 8, 9, 18, 22], "organ": [15, 24, 25], "origin": [9, 18, 20, 22], "original_system": 9, "orthonorm": [7, 22], "orthorhomb": [6, 20], "other": [6, 7, 8, 14, 17, 22, 24, 28], "otherwis": [2, 6, 7, 15, 17], "our": [14, 15, 22, 24, 25, 29], "out": [19, 21, 22, 23, 29], "outer": [7, 14, 22], "outlin": 29, "output": [2, 6, 7, 9, 14, 15, 16, 17, 18, 19, 20, 21, 24, 25, 28], "output_no_weight": 20, "output_s": 7, "output_typ": [6, 9], "output_weight": 20, "outsid": [6, 9], "over": [7, 17, 22, 25, 26], "overcom": 20, "overfit": 25, "overhead": 7, "overlap": [7, 11, 20, 21, 23, 28], "overload": 5, "overrid": [7, 22], "overwrit": 7, "oxygen": 17, "p": [7, 8, 22, 26], "p_": [7, 8, 22, 26], "packag": [0, 1, 10, 11, 12], "pad": [7, 18, 21], "page": [2, 3, 13, 14, 15, 17, 20], "pair": [7, 16, 20, 23], "pairwis": [6, 7, 8, 9, 19, 20, 23, 26], "paper": 17, "paradigm": 23, "parallel": [7, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23], "parallelpip": 6, "param": 7, "paramet": [2, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26], "part": [7, 13, 17, 18, 20, 21, 22, 29], "partial": [7, 22, 25], "particular": [14, 15, 19, 22], "pass": [8, 25, 26], "patienc": 25, "patrick": [3, 13], "pattern": 19, "pbc": [2, 6, 7, 16, 17, 19, 20, 22], "pdf": 17, "pdist": 22, "peer": 13, "penalti": 8, "pep": 4, "per": [20, 24], "pereira": 17, "perfectli": 21, "perfom": 7, "perform": [2, 7, 14, 20, 22, 24, 25, 29], "perimet": 20, "period": [2, 5, 6, 7, 9, 14, 16, 18, 19, 23, 24, 25, 26, 27, 29], "periodic_soap": 22, "permiss": [5, 6, 7, 8, 9], "permut": [7, 18, 21, 25], "peroxid": 22, "perpendicular": 6, "perspect": 7, "phase": [25, 29], "phi": [7, 18, 22], "philipp": 13, "phy": [7, 8, 16, 17, 22, 26], "physic": [0, 3, 6, 7, 13, 16, 17, 18, 19, 20, 21, 22, 23], "physrevb": [7, 22], "physrevlett": [7, 17], "pi": [6, 7, 18, 20, 21, 22, 23], "pip": 4, "place": [2, 6, 17, 28], "plane": [6, 21, 24], "platform": 12, "pleas": [0, 3, 14], "plot": [19, 20, 21, 22, 23, 24, 25], "plt": [23, 24, 25], "png": 29, "po": 6, "point": [6, 7, 8, 19, 20, 22, 23, 24, 25], "poli": [7, 22, 24], "polynomi": [7, 8, 17, 22], "popul": 25, "pos1": 9, "pos2": 9, "posit": [1, 2, 5, 6, 7, 9, 10, 11, 14, 15, 19, 21, 23, 25, 27, 28, 29], "positions_cart": 24, "positions_sc": 24, "possibl": [0, 2, 6, 7, 15, 16, 17, 19, 20, 22, 23, 27], "possibli": 25, "potenti": [7, 16, 17, 22, 25], "pow": [7, 22], "power": [7, 22, 24], "practic": [20, 22], "pre": [4, 24], "prealloc": 7, "precis": [2, 7, 8, 19, 20, 22, 23], "predict": [7, 13, 17, 20, 25], "prefactor": 7, "prefer": [7, 15, 16, 19, 20, 22, 23], "prepar": [7, 25], "prepare_cent": [5, 7], "preprint": 23, "preprocess": [20, 24, 25, 26], "present": [7, 9, 14, 16, 19, 20, 22, 23], "preserv": 22, "pretti": 25, "prevent": [22, 25], "previou": [14, 23], "primit": [7, 20], "principl": [25, 29], "print": [7, 16, 17, 18, 19, 20, 21, 22, 23, 25], "priori": 29, "problem": [12, 20], "process": [6, 7, 13, 15, 17, 18, 21], "produc": [2, 7, 14, 25], "product": [22, 25], "produd": 25, "programm": 0, "progress": [7, 16, 17, 18, 19, 20, 21, 22, 23], "project": [0, 6, 12], "proper": 14, "properti": [5, 6, 7, 14, 20, 21, 25, 29], "propp": 13, "provid": [7, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 27, 28], "pseudo": [16, 22], "pt": 25, "public": 23, "publicli": 0, "publish": [3, 17], "pull": 4, "pure": 7, "purpos": [7, 14], "py": [4, 12, 17, 18, 19, 20, 21, 22, 23, 25], "pybind11": [2, 12], "pybind11_object": 5, "pyplot": [19, 20, 21, 23, 24, 25], "pytest": 4, "python": [2, 7, 11, 12, 14], "python3": 12, "pythonx": 12, "pytorch": 25, "q": [17, 18], "qua": [7, 21], "quadrat": [7, 22], "quantifi": 28, "quantiti": [6, 20, 22, 25], "quantum": [7, 21, 22], "queri": [7, 20, 22], "quickli": [15, 25], "quit": [15, 19], "r": [4, 6, 7, 18, 21, 22, 23, 24, 25], "r0": [7, 22, 24], "r1": 7, "r2": 7, "r_": [7, 16, 17, 19, 20, 22, 23], "r_0": [7, 22], "r_cut": [1, 2, 5, 7, 10, 14, 16, 18, 19, 20, 22, 23, 25, 26, 27], "r_i": 25, "r_numpi": 25, "r_train_ful": 25, "r_whole": 25, "radial": [2, 7, 9, 19, 20, 22, 23], "radial_cutoff": 9, "radiu": [6, 7, 9, 18], "rais": [2, 7, 20], "ram": 27, "ranawat": 3, "random": [7, 17, 18, 21], "random_st": [24, 25], "randomli": [7, 17, 18, 21, 25], "randperm": 25, "rang": [7, 20, 22, 23, 24, 25, 29], "range_xi": 24, "rather": [7, 22], "rattl": 29, "ravel": 24, "raw": [6, 20], "rbf": [7, 8, 22, 26], "rcut": 2, "re": [15, 26, 29], "re_kernel": 26, "reach": [6, 7, 9], "read": [4, 6, 14, 17], "real": [7, 18, 22, 25, 28], "rearrang": 15, "reason": [17, 20, 22, 24], "receiv": 0, "reciproc": [6, 7, 18], "reciprocal_lattic": [5, 6], "reciprocal_lattice_crystallograph": [5, 6], "recov": 20, "red": 29, "reduc": [7, 22, 24], "refer": [7, 8, 22], "refresh": [14, 28], "region": [7, 19, 22, 24], "regress": [13, 14], "regular": [7, 8, 15], "rel": [6, 7, 18, 26], "relat": 18, "releas": [7, 12], "remain": 17, "rematch": 8, "rematchkernel": [1, 5, 10, 26], "remov": [2, 9, 20], "renam": 2, "repeat": [9, 22], "repetit": 20, "report": [7, 16, 17, 18, 19, 20, 21, 22, 23], "repositori": [4, 25], "repres": [6, 7, 14, 16, 17, 18, 20, 22, 24, 26], "represent": [7, 11, 17, 21, 22, 28], "repuls": 17, "request": [2, 4, 7, 16, 17, 18, 19, 20, 21, 22, 23], "requir": [5, 6, 7, 8, 9, 12, 14, 17, 19, 22, 25], "requires_grad": 25, "research": 0, "respect": [2, 7, 8, 14, 15, 16, 17, 19, 20, 22, 25], "respons": 25, "rest": [7, 17, 19, 20], "restrict": 22, "result": [6, 7, 16, 17, 18, 21, 22, 24, 25, 26], "retain": 15, "retriev": [20, 22], "return": [6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 29], "return_cell_indic": 9, "return_descriptor": [7, 14, 15], "rev": [7, 17, 22], "reveal": 19, "review": [13, 22], "rg": 16, "rho": 22, "rhombohedr": 6, "ri": 7, "rickard": [7, 21], "ridg": 13, "right": [7, 17, 18, 21, 22, 23, 25], "rightarrow": 26, "rink": [3, 13], "risi": [7, 22], "rj": 7, "rk": 23, "robert": [7, 17], "rocksalt": [18, 20, 21, 23], "root": 4, "rotat": [17, 29], "rough": 29, "routin": 27, "row": [6, 7, 17, 18, 21, 22, 25], "rule": 7, "run": [2, 4, 7, 12, 15, 22, 25], "rupp": [7, 13, 17, 20], "rvert": [6, 21, 22], "s41524": [7, 22], "sake": 23, "same": [2, 7, 8, 9, 14, 15, 17, 20, 22, 23, 26, 27, 29], "sampl": [7, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29], "sandip": [7, 8, 22, 26], "save": [15, 24, 25, 27], "save_npz": 27, "scalabl": 7, "scalar": 20, "scale": [6, 7, 14, 19, 20, 22, 23, 25, 29], "scale_": 25, "scale_atom": 6, "scaled_posit": 6, "scaler": 25, "scan": 24, "scatter": [24, 25], "scenario": 29, "scheme": [7, 15, 16, 19, 22], "scienc": [3, 11, 14], "scientif": 13, "scikit": [8, 26], "scipi": [7, 9, 18, 19, 22, 27], "scrambl": [7, 17, 18, 21], "screen": [7, 18, 19, 20], "script": [24, 25], "second": [6, 7, 8, 9, 15, 16, 17, 19, 22, 24, 25], "section": [23, 28], "see": [2, 5, 6, 7, 8, 9, 12, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24, 26, 29], "seed": [7, 17, 18, 21, 29], "seem": 22, "seen": [17, 18], "select": [7, 12, 22, 24, 25], "self": [5, 6, 18, 25], "sensibl": 22, "separ": [7, 14, 15, 16, 17, 18, 19, 21, 22, 29], "sequenc": 6, "serial": [7, 16, 17, 18, 19, 20, 21, 22, 23], "set": [2, 6, 7, 9, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29], "set_calcul": 25, "set_cel": [5, 6, 17, 29], "set_pbc": [5, 6, 17], "set_posit": [5, 6], "set_scaled_posit": [5, 6], "set_xlabel": [20, 21, 23, 24, 25], "set_ylabel": [21, 24, 25], "setup": [7, 12, 14], "sever": [4, 12, 17, 25, 28], "shape": [2, 7, 16, 17, 19, 20, 21, 22, 23, 24, 25], "share": 6, "sharex": 25, "sharp": [7, 19, 20], "shortcut": 7, "should": [4, 6, 7, 8, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 28], "show": [19, 20, 21, 23, 24, 25], "show_unit_cel": 29, "shown": [22, 25], "siamac": 17, "sight": 17, "sigma": [7, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 29], "sigmoid": [8, 25], "signatur": 28, "signifi": 23, "signific": [15, 27], "sim": [7, 22], "similar": [8, 11, 14, 17, 20, 22, 24, 29], "similarli": [15, 23, 27], "simpl": [17, 24, 25, 29], "simplest": [24, 26], "simpli": [4, 9, 14, 22, 24, 25, 27, 28, 29], "simplic": 25, "simplifi": [2, 22, 24], "simul": [7, 14], "sin": [0, 7, 21, 23], "sinc": [6, 12, 15, 17, 22, 29], "sine": [7, 11, 17, 28], "sine_matric": 21, "sinematrix": [1, 2, 5, 10, 21], "singl": [2, 7, 14, 15, 19, 20, 22, 23, 24, 27], "singroup": 12, "sinkhorn": 8, "site": [6, 7, 14, 22, 24], "size": [2, 7, 11, 14, 15, 17, 18, 19, 20, 21, 22, 25, 27, 29], "sklearn": [8, 24, 25, 26], "slab_ad": 19, "slab_pur": 19, "slice": [7, 20, 21, 22, 27], "slightli": [7, 18, 22], "sm": 21, "small": [20, 22], "small_soap": 22, "smallest": 6, "smear": 22, "smooth": [7, 11, 16, 17, 19, 20, 28], "smooth_cutoff": [2, 7, 19, 20], "smoothli": 22, "snippet": [17, 20, 23], "so": [2, 7, 17, 20, 22], "soap": [1, 2, 5, 10, 11, 14, 15, 22, 24, 25, 26, 27], "soap_copp": 22, "soap_featur": 27, "soap_methanol": 22, "soap_peroxid": 22, "soap_wat": 22, "soapgto": [1, 5, 10], "soappolynomi": [1, 5, 10], "softwar": [0, 5, 6, 7, 8, 9], "solid": [6, 7, 8, 19, 20, 22, 26], "solut": [8, 26], "solv": 20, "some": [7, 14, 15, 19, 20, 21, 22, 23, 24, 26, 29], "someth": 25, "sometim": 22, "sophist": 17, "sort": [5, 7, 17, 18, 21], "sort_randomli": [5, 7], "sorted_l2": [2, 7, 17, 18, 21], "sourc": [6, 7, 8, 9, 11, 16, 17, 18, 19, 20, 21, 22, 23], "space": [2, 7, 8, 14, 15, 17, 18, 20, 22, 23, 25, 26, 27, 29], "span": 22, "spars": [2, 5, 6, 7, 9, 14, 15, 16, 17, 18, 19, 20, 21, 23, 26, 28], "spatial": [19, 22], "spaw": [17, 18, 21], "speci": [1, 5, 7, 10, 14, 16, 19, 20, 22, 23, 24, 25, 26, 27, 29], "species_weight": [7, 22], "specif": [5, 6, 7, 8, 9, 14, 16, 17, 18, 20, 21, 22], "specifi": [6, 7, 8, 9, 12, 15, 17, 18, 20, 21, 22], "spectralclust": 24, "spectrum": [7, 22], "speed": [7, 15, 18], "speic": [7, 19, 20], "sphere": 6, "spheric": [7, 21, 22], "sphinx": 4, "spin": 13, "split": [15, 17, 18, 21, 24], "spmatrix": 9, "sqrt": [7, 8, 18, 22], "squar": [7, 19, 20, 25], "squareform": 22, "src": 4, "stabl": 12, "standard": [6, 7, 17, 18, 19, 20, 21, 22, 23, 25], "standardscal": [24, 25], "start": [11, 14, 28, 29], "stat": [1, 5, 10], "state": 6, "state_dict": 25, "static": 6, "static_s": 7, "statist": 9, "std": 25, "step": [12, 14, 25, 29], "still": [7, 15, 17, 22, 25, 27], "stop": [20, 25], "storag": 15, "store": [14, 15, 27], "str": [5, 6, 7, 9, 19, 20, 22, 23], "strategi": 26, "stratif": [16, 19, 22], "stratifi": 16, "string": [7, 8, 9, 17, 18, 21], "structur": [0, 2, 4, 7, 8, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29], "structure1": 14, "structure2": 14, "structure3": 14, "studi": [7, 15, 23], "stuke": 13, "subclass": 23, "submit": 0, "submodul": [1, 10, 12], "subpackag": [1, 10], "subplot": [20, 21, 23, 24, 25], "subplots_adjust": 25, "subselect": 25, "subsequ": 6, "subset": 24, "subspac": 6, "succesfulli": 4, "sudo": 12, "suffici": 7, "suggest": 19, "suitabl": [14, 20, 22], "sum": [7, 11, 17, 22, 25, 28], "sum_": [7, 8, 21, 22, 26], "sum_i": [7, 22], "sum_m": [7, 22], "sum_z": [7, 22], "summar": 14, "summari": 20, "summat": [7, 18], "super": 25, "supercel": [6, 20], "supervis": [14, 24, 28], "suppli": [7, 22], "support": [2, 7, 12, 20, 22, 23, 26, 27], "suppport": 27, "surfac": [0, 19, 24], "surround": 7, "survei": 7, "sx": [7, 19, 20], "symbol": [6, 7, 9, 14, 16, 19, 20, 22, 23], "symbols_to_numb": [1, 5, 9], "symmetr": [6, 9, 17, 22], "symmetri": [7, 11, 22, 28], "syntax": [16, 17, 18, 19, 20, 21, 22, 23, 27], "system": [1, 2, 5, 7, 9, 10, 12, 15, 16, 18, 19, 21, 23, 24, 25, 28], "system_iter": 9, "system_stat": [1, 5, 9], "t": [23, 24, 25], "tabl": [7, 22], "tag": 6, "take": [2, 6, 7, 9, 17, 18, 20, 21, 22, 24, 25], "taken": [2, 20, 22, 25, 26], "target": [7, 25], "task": [11, 24], "techniqu": [7, 18, 28, 29], "tell": [7, 19, 20, 23, 25], "ten": 24, "tensor": [7, 11, 25, 28], "tensorflow": [2, 25], "term": [2, 7, 17, 18, 19, 20, 22, 23], "tesser": [7, 22], "test": [4, 7, 11, 12, 25], "test_siz": 25, "text": [7, 17, 18, 21, 22, 25], "than": [7, 14, 17, 18, 21, 22], "thank": 2, "the_divid": 21, "thei": [7, 11, 14, 15, 20, 22], "them": [0, 6, 7, 14, 24, 25, 26, 27], "theori": 0, "theta": 22, "thi": [0, 2, 5, 6, 7, 8, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "thing": [4, 24], "think": 13, "third": [6, 7], "thirti": 25, "thread": 7, "three": [6, 7, 15, 16, 22], "threshold": [7, 8, 19, 20, 22, 23, 26, 29], "through": [2, 7, 12, 14, 15, 18, 19, 20, 22, 25, 26], "throughout": [7, 16], "thu": [7, 14, 19, 20, 23, 25], "ti": [7, 15, 29], "tick": 21, "tight_layout": [21, 24], "tighter": 18, "time": [6, 7, 9, 14, 19, 20, 22, 23, 25], "titl": 3, "tkatchenko": [7, 17], "to_cartesian": [5, 6], "to_scal": [5, 6], "tocsc": 27, "tocsr": 27, "todens": 27, "todorovi": 3, "todorovi\u0107": 13, "togeth": [6, 7, 15, 18, 20], "tool": [12, 24, 26], "top": [7, 19, 22, 24, 25], "top_z_scal": 24, "topmost": 24, "torch": 25, "total": 7, "total_energi": 18, "toukmaji": 7, "toward": [8, 22], "tr": [8, 26], "train": [2, 7, 16, 19, 22, 28], "train_test_split": [24, 25], "training_pytorch": 25, "training_tensorflow": 25, "traj": 25, "transax": 25, "transform": [6, 9, 11, 14, 17, 20, 25], "translat": [17, 20, 29], "tree": [6, 9, 20], "triangl": 20, "tricki": 19, "tripl": 20, "triplet": [7, 16, 20], "trivial": 22, "true": [2, 6, 7, 8, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29], "truli": 20, "try": [17, 22, 24], "tsne": 24, "tune": [19, 22], "tupl": [7, 9], "turn": [2, 22], "tutori": [2, 4, 11, 14, 15, 19, 22, 23, 24, 25, 26, 29], "two": [6, 7, 8, 14, 16, 17, 18, 20, 21, 22, 25, 26, 27, 29], "txt": 4, "type": [6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23], "typic": [7, 12, 15, 22, 25], "u": [8, 13, 25, 26], "ubuntu": 12, "ultim": 20, "under": [0, 2, 5, 6, 7, 8, 9, 22, 25], "understand": [14, 15, 19, 23], "understood": 17, "unflatten": [2, 5, 7, 18, 21], "unformat": 4, "unifi": 20, "uniform": [18, 22], "union": 0, "uniqu": [7, 20, 22], "unit": [6, 7, 14, 18, 20, 21, 22], "uniti": [7, 19, 20], "univers": 0, "unlabel": 24, "unless": [5, 6, 7, 8, 9], "unspecifi": [7, 22], "unstabl": 26, "unsupervis": [14, 28], "until": 7, "up": [7, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29], "updat": [2, 3, 11, 12, 14, 25], "upon": 15, "upper": 7, "upside_down_methanol": 17, "url": [3, 17], "us": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "usag": [7, 17, 18, 20, 21, 22, 27], "user": 7, "usual": 14, "util": [1, 4, 5, 10], "v": [3, 7, 17, 18, 20, 22], "vacuum": [19, 24, 29], "valid": [2, 7, 14, 19, 20, 22, 23, 25], "valid_loss": 25, "validate_atomic_numb": [5, 7], "validate_cel": [5, 7], "validate_derivatives_method": [5, 7], "validate_g2_param": [5, 7], "validate_g3_param": [5, 7], "validate_g4_param": [5, 7], "validate_g5_param": [5, 7], "validate_pbc": [5, 7], "validate_posit": [5, 7], "validate_r_cut": [5, 7], "validate_speci": [5, 7], "vall": [2, 7, 11, 20, 28], "valle_oganov": [2, 7, 20, 23], "valleoganov": [1, 2, 5, 10, 23], "valu": [7, 8, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 29], "valueerror": 7, "var": 25, "var_energy_train": 25, "var_force_train": 25, "variabl": [7, 18, 25], "varianc": 25, "variat": 22, "variou": [2, 6, 11, 14], "vdot": 25, "vector": [6, 7, 8, 14, 15, 16, 20, 21, 22, 24, 25, 26, 27], "verbos": [7, 16, 17, 18, 19, 20, 21, 22, 23], "veri": [2, 14, 15, 20, 21, 22, 23, 25, 27, 28, 29], "version": [0, 2, 3, 5, 6, 7, 8, 9, 12, 22, 27], "verticalalign": 25, "view": [18, 24], "viridi": 24, "virtual": [7, 16, 17, 18, 19, 20, 21, 22, 23], "visual": [2, 7, 11, 14, 24], "vo": 23, "vo_nacl": 23, "vo_output": 23, "vo_wat": 23, "volum": [3, 7, 20], "von": [7, 17, 21], "vstack": [22, 24], "w": [7, 18, 22], "w0": [7, 22], "wa": [2, 17, 18, 24], "wai": [6, 7, 14, 15, 16, 18, 19, 22, 24, 25, 26], "want": [2, 7, 14, 16, 17, 19, 20, 22, 28, 29], "warranti": [5, 6, 7, 8, 9], "water": [14, 16, 19, 20, 22, 23], "we": [4, 6, 12, 15, 18, 19, 20, 22, 24, 25, 26, 28, 29], "weight": [2, 5, 7, 18, 19, 23, 24, 25, 29], "weinberg": 17, "well": [7, 15, 22], "were": [2, 7, 8, 15], "what": [20, 25], "wheel": [2, 12], "when": [2, 3, 6, 7, 12, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "whenev": [2, 7, 15, 27], "where": [6, 7, 8, 12, 16, 17, 18, 19, 20, 21, 22, 23, 26, 29], "wherea": [7, 19, 20], "whether": [6, 7, 8, 9, 15, 16, 17, 18, 19, 20, 21, 22, 23], "which": [4, 6, 7, 9, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "whole": [20, 25, 26], "width": [7, 18, 22, 23], "wihuri": 0, "willatt": [7, 22], "window": 2, "wish": [4, 7, 15, 22, 25], "within": [4, 6, 9, 19, 22], "without": [5, 6, 7, 8, 9, 20, 24, 25], "wll": 14, "word": [7, 22], "work": [12, 14, 15, 23, 26], "would": [6, 17, 19, 20, 22, 23, 25, 29], "wrap": 6, "write": [5, 6, 7, 8, 9, 14, 29], "www": [5, 6, 7, 8, 9], "wyckoff_posit": 6, "x": [6, 7, 8, 12, 15, 19, 20, 21, 23, 24, 25], "x_i": 25, "xcode": 12, "xi": 22, "xlabel": [19, 25], "xscoschx": [2, 25], "xy": [6, 21], "xyz": [7, 9, 14], "y": [7, 8, 15, 19, 20, 21, 22, 24], "y_": 22, "y_i": 25, "yashasvi": 3, "year": 3, "yet": 25, "yield": [7, 22], "ylabel": 25, "you": [0, 1, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28], "your": [2, 4, 14, 15, 17, 18, 21, 22, 28], "z": [3, 6, 7, 15, 16, 17, 21, 22, 24], "z_": 22, "z_1": [7, 22], "z_2": [7, 22], "z_i": [17, 18, 21, 22, 25], "z_j": [17, 18, 21], "zeolit": 7, "zero": [7, 8, 18, 21, 22, 25, 27, 29], "zero_": 25, "zero_grad": 25, "zero_pad": [5, 7], "zeta": [7, 16], "zi": 7, "zieh": 17, "zip": 6, "zip_result": 6, "zj": 7, "zorder": 25, "\u00e1": [22, 26], "\u00e4": 22, "\u00e5": [19, 21, 24, 25], "\u00e9": 17, "\u00f3": [22, 26], "\u00f6": 16, "\u00f8": 23, "\u00fc": 17}, "titles": ["About", "API", "Changelog", "Citing DScribe", "Contributing", "dscribe package", "dscribe.core package", "dscribe.descriptors package", "dscribe.kernels package", "dscribe.utils package", "dscribe", "DScribe", "Installation", "Publications", "Basic concepts", "Derivatives", "Atom-centered Symmetry Functions", "Coulomb Matrix", "Ewald sum matrix", "Local Many-body Tensor Representation", "Many-body Tensor Representation", "Sine matrix", "Smooth Overlap of Atomic Positions", "Valle-Oganov descriptor", "Unsupervised Learning: Clustering", "Supervised Learning: Training an ML Force-field", "Building similarity kernels from local environments", "Sparse output", "Tutorials", "Chemical Environment Visualization with Local Descriptors"], "titleterms": {"2019": 13, "2020": 13, "Not": 17, "The": 20, "about": 0, "accuraci": 18, "acsf": 7, "adsorpt": 19, "an": 25, "analysi": [19, 24, 25, 28], "api": 1, "atom": [16, 22], "author": 0, "averag": [22, 26], "averagekernel": 8, "basic": [14, 28], "bodi": [19, 20], "build": 26, "call": 15, "capabl": 11, "center": 16, "changelog": 2, "chemic": 29, "cite": 3, "class": 23, "cluster": 24, "code": 4, "color": 29, "common": 12, "concept": 14, "conda": 12, "contact": 0, "content": [5, 6, 7, 8, 9], "contribut": 4, "convers": 27, "core": 6, "coulomb": 17, "coulombmatrix": 7, "creation": [16, 17, 18, 19, 20, 21, 22, 23], "crystal": 21, "dataset": [24, 25], "deeper": 11, "deriv": 15, "descriptor": [7, 23, 28, 29], "descriptorglob": 7, "descriptorloc": 7, "descriptormatrix": 7, "dimension": 9, "dscribe": [3, 5, 6, 7, 8, 9, 10, 11], "electrostat": 18, "energi": 18, "environ": [26, 29], "ewald": 18, "ewaldsummatrix": 7, "exampl": [17, 18, 19, 20, 21, 22, 23], "ext": 5, "field": 25, "final": 29, "finit": [20, 22], "flatten": 17, "forc": 25, "from": [12, 26], "function": [16, 20], "fund": 0, "gener": [24, 25], "geometri": [9, 20], "glanc": 11, "go": 11, "guidelin": 4, "inform": [20, 22], "instal": 12, "interact": 21, "invari": 17, "issu": 12, "kernel": [8, 26], "lattic": 6, "layout": 15, "learn": [24, 25, 28], "licens": 0, "lmbtr": 7, "local": [19, 26, 29], "localsimilaritykernel": 8, "locat": [20, 22], "machin": 28, "mani": [19, 20], "matrix": [17, 18, 21], "mbtr": [7, 23], "meant": 17, "ml": 25, "modul": [5, 6, 7, 8, 9], "normal": 20, "oganov": 23, "option": 17, "output": [22, 23, 27], "overlap": 22, "packag": [5, 6, 7, 8, 9], "pad": 17, "period": [17, 20, 21, 22], "permut": 17, "persist": 27, "pip": 12, "posit": 22, "public": 13, "refer": 29, "rematch": 26, "rematchkernel": 8, "represent": [19, 20], "setup": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "side": 23, "signatur": 15, "similar": [26, 28], "sine": 21, "sinematrix": 7, "site": 19, "smooth": 22, "soap": 7, "sourc": 12, "spars": [22, 27], "speci": 9, "stat": 9, "style": 4, "submodul": [5, 6, 7, 8, 9], "subpackag": 5, "sum": 18, "supervis": 25, "symmetri": 16, "system": [6, 17, 20, 22, 29], "tensor": [19, 20], "terminologi": 14, "total": 18, "train": [24, 25], "tutori": 28, "typic": 14, "unsupervis": 24, "util": 9, "vall": 23, "valleoganov": 7, "visual": [20, 23, 28, 29], "weight": [20, 22], "workflow": 14, "zero": 17}}) \ No newline at end of file diff --git a/docs/2.1.x/tutorials/basics.html b/docs/2.1.x/tutorials/basics.html index bfe23d6d..5397aa5b 100644 --- a/docs/2.1.x/tutorials/basics.html +++ b/docs/2.1.x/tutorials/basics.html @@ -1,23 +1,25 @@ - + - + Basic concepts — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -103,7 +105,7 @@
                    -

                    Basic concepts

                    +

                    Basic concepts

                    This tutorial covers the very basic concepts that are needed to get started with DScribe and descriptors in general. Please read through this page before moving on to other tutorials if you have no previous experience or @@ -129,7 +131,7 @@

                    Basic concepts -

                    Terminology

                    +

                    Terminology

                    • structure: An atomic geometry containing the chemical species, atomic @@ -150,7 +152,7 @@

                      Terminology -

                      Typical workflow

                      +

                      Typical workflow

                      1. DScribe uses the Atomic Simulation Environment (ASE) to represent and work diff --git a/docs/2.1.x/tutorials/derivatives.html b/docs/2.1.x/tutorials/derivatives.html index 30da310b..72a118be 100644 --- a/docs/2.1.x/tutorials/derivatives.html +++ b/docs/2.1.x/tutorials/derivatives.html @@ -1,23 +1,25 @@ - + - + Derivatives — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -102,7 +104,7 @@

                        -

                        Derivatives

                        +

                        Derivatives

                        The descriptor outputs that DScribe provides are typically vectors containing multiple features. Each of these features has a dependency on the positions of atoms in the system, and in particular each feature has a derivative with @@ -113,7 +115,7 @@

                        Derivativesthe tutorial on building one.

                        -

                        Call signature

                        +

                        Call signature

                        The descriptors for which derivatives have been made available have a new derivatives-function, see e.g. SOAP.derivatives(). This function works very similarly to the create function and the typical function call signature @@ -150,7 +152,7 @@

                        Call signature -

                        Layout

                        +

                        Layout

                        We have decided to retain as much structure in the derivative output as possible. This approach allows you to better understand the different components, and you still have the option to re-arrange the output as you wish. diff --git a/docs/2.1.x/tutorials/descriptors/acsf.html b/docs/2.1.x/tutorials/descriptors/acsf.html index 742a3071..df091e8e 100644 --- a/docs/2.1.x/tutorials/descriptors/acsf.html +++ b/docs/2.1.x/tutorials/descriptors/acsf.html @@ -1,23 +1,25 @@ - + - + Atom-centered Symmetry Functions — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -108,7 +110,7 @@

                        -

                        Atom-centered Symmetry Functions

                        +

                        Atom-centered Symmetry Functions

                        Atom-centered Symmetry Functions (ACSFs) [1] can be used to represent the local environment near an atom by using a fingerprint composed of the output of multiple two- and three-body functions that can be customized to @@ -137,7 +139,7 @@

                        Atom-centered Symmetry Functions -

                        Setup

                        +

                        Setup

                        Instantiating an ACSF descriptor can be done as follows:

                        from dscribe.descriptors import ACSF
                         
                        @@ -153,11 +155,11 @@ 

                        Setup

                        The arguments have the following effect:

                        -ACSF.__init__(r_cut, g2_params=None, g3_params=None, g4_params=None, g5_params=None, species=None, periodic=False, sparse=False, dtype='float64')[source]
                        +ACSF.__init__(r_cut, g2_params=None, g3_params=None, g4_params=None, g5_params=None, species=None, periodic=False, sparse=False, dtype='float64')[source]
                        Parameters:
                        @@ -187,7 +189,7 @@

                        Setup

                        -

                        Creation

                        +

                        Creation

                        After ACSF has been set up, it may be used on atomic structures with the create()-method.

                        from ase.build import molecule
                        @@ -211,21 +213,21 @@ 

                        Creation
                        • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

                        • -
                        • centers (list) – Indices of the atoms to use as ACSF centers. If no +

                        • centers (list) – Indices of the atoms to use as ACSF centers. If no centers are defined, the output will be created for all atoms in the system. When calculating output for multiple systems, provide the centers as a list for each system.

                        • -
                        • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

                        • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

                        • -
                        • only_physical_cores (bool) – If a negative n_jobs is given, +

                        • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

                        • -
                        • verbose (bool) – Controls whether to print the progress of each job +

                        • verbose (bool) – Controls whether to print the progress of each job into to the console.

                        @@ -247,6 +249,7 @@

                        Creation[n_positions, n_features]. The number of features may be requested beforehand with the get_number_of_features()-method.

                        +
                        [1]

                        Jörg Behler. Atom-centered symmetry functions for constructing high-dimensional neural network potentials. J. Chem. Phys., 134(7):074106, 2011.

                        diff --git a/docs/2.1.x/tutorials/descriptors/coulomb_matrix.html b/docs/2.1.x/tutorials/descriptors/coulomb_matrix.html index 61ed09dc..2cbe14b1 100644 --- a/docs/2.1.x/tutorials/descriptors/coulomb_matrix.html +++ b/docs/2.1.x/tutorials/descriptors/coulomb_matrix.html @@ -1,23 +1,25 @@ - + - + Coulomb Matrix — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -109,7 +111,7 @@
                        -

                        Coulomb Matrix

                        +

                        Coulomb Matrix

                        Coulomb Matrix (CM) [1] is a simple global descriptor which mimics the electrostatic interaction between nuclei.

                        Coulomb matrix is calculated with the equation below.

                        @@ -148,7 +150,7 @@

                        Coulomb Matrix -

                        Setup

                        +

                        Setup

                        Instantiating the object that is used to create Coulomb matrices can be done as follows:

                        from dscribe.descriptors import CoulombMatrix
                        @@ -160,11 +162,11 @@ 

                        Setup

                        The constructor takes the following parameters:

                        -CoulombMatrix.__init__(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False)[source]
                        +CoulombMatrix.__init__(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False)[source]
                        Parameters:
                          -
                        • n_atoms_max (int) – The maximum nuber of atoms that any of the +

                        • n_atoms_max (int) – The maximum nuber of atoms that any of the samples can have. This controls how much zeros need to be padded to the final result.

                        • permutation (string) –

                          Defines the method for handling permutational @@ -183,14 +185,14 @@

                          Setup

                    -
                  • sigma (float) – Provide only when using the random-permutation +

                  • sigma (float) – Provide only when using the random-permutation option. Standard deviation of the gaussian distributed noise determining how much the rows and columns of the randomly sorted matrix are scrambled.

                  • -
                  • seed (int) – Provide only when using the random-permutation +

                  • seed (int) – Provide only when using the random-permutation option. A seed to use for drawing samples from a normal distribution.

                  • -
                  • sparse (bool) – Whether the output should be a sparse matrix or a +

                  • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

                  @@ -199,7 +201,7 @@

                  Setup

                  -

                  Creation

                  +

                  Creation

                  After CM has been set up, it may be used on atomic structures with the create-method.

                  # Create CM output for the system
                  @@ -223,17 +225,17 @@ 

                  Creation
                  • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

                  • -
                  • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

                  • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

                  • -
                  • only_physical_cores (bool) – If a negative n_jobs is given, +

                  • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

                  • -
                  • verbose (bool) – Controls whether to print the progress of each job +

                  • verbose (bool) – Controls whether to print the progress of each job into to the console.

                  @@ -258,16 +260,16 @@

                  Creation -

                  Examples

                  +

                  Examples

                  The following examples demonstrate usage of the descriptor. These examples are also available in dscribe/examples/coulombmatrix.py.

                  -

                  Flattening

                  +

                  Flattening

                  You can control whether the returned array is two-dimensional or one-dimensional by using the flatten-parameter

                  -

                  Options for permutation

                  +

                  Options for permutation

                  The following snippet introduces the different options for handling permutation invariance. See [2] for more information on these methods.

                  # No sorting
                  @@ -332,7 +334,7 @@ 

                  Options for permutation

                  -

                  Zero-padding

                  +

                  Zero-padding

                  The number of non-zero features in CM depends on the size of the system. If the structure has fewer atoms than n_atoms_max, the rest of the CM will be zero-padded. One can imagine non-interacting ghost atoms as place-holders to @@ -347,7 +349,7 @@

                  Zero-padding -

                  Not meant for periodic systems

                  +

                  Not meant for periodic systems

                  The CM was not designed for periodic systems. If you do add periodic boundary conditions, you will see that it does not change the elements.

                  # Not meant for periodic systems
                  @@ -366,7 +368,7 @@ 

                  Not meant for periodic systemsSine Matrix and the Ewald Sum Matrix have been designed as periodic counterparts to the CM.

                  -

                  Invariance

                  +

                  Invariance

                  A good descriptor should be invariant with respect to translation, rotation and permutation. No matter how you translate or rotate it or change the indexing of the atoms (not the atom types!), it will still be the same molecule! The @@ -394,6 +396,7 @@

                  Invariance +
                  [1]

                  Matthias Rupp, Alexandre Tkatchenko, Klaus-Robert Müller, and O. Anatole von Lilienfeld. Fast and accurate modeling of molecular atomization energies with machine learning. Phys. Rev. Lett., 108:058301, Jan 2012. doi:10.1103/PhysRevLett.108.058301.

                  diff --git a/docs/2.1.x/tutorials/descriptors/ewald_sum_matrix.html b/docs/2.1.x/tutorials/descriptors/ewald_sum_matrix.html index 126d3023..12eb525f 100644 --- a/docs/2.1.x/tutorials/descriptors/ewald_sum_matrix.html +++ b/docs/2.1.x/tutorials/descriptors/ewald_sum_matrix.html @@ -1,23 +1,25 @@ - + - + Ewald sum matrix — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -109,7 +111,7 @@
                  -

                  Ewald sum matrix

                  +

                  Ewald sum matrix

                  Ewald sum matrix [1] can be viewed as a logical extension of the Coulomb matrix for periodic systems, as it models the interaction between atoms in a periodic crystal through electrostatic interaction. However, in order to @@ -130,7 +132,7 @@

                  Ewald sum matrix \[\phi^{\text{self}}_{ij} + \phi^{\text{bg}}_{ij} = -\frac{\pi}{2 V \alpha^2} Z_i Z_j~\forall~i \neq j\]

                  -

                  Setup

                  +

                  Setup

                  Instantiating the object that is used to create Ewald sum matrices can be done as follows:

                  from dscribe.descriptors import EwaldSumMatrix
                  @@ -142,11 +144,11 @@ 

                  Setup

                  The constructor takes the following parameters:

                  -EwaldSumMatrix.__init__(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False, dtype='float64')
                  +EwaldSumMatrix.__init__(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False, dtype='float64')
                  Parameters:
                    -
                  • n_atoms_max (int) – The maximum nuber of atoms that any of the +

                  • n_atoms_max (int) – The maximum nuber of atoms that any of the samples can have. This controls how much zeros need to be padded to the final result.

                  • permutation (string) –

                    Defines the method for handling permutational @@ -165,14 +167,14 @@

                    Setup

                -
              • sigma (float) – Provide only when using the random-permutation +

              • sigma (float) – Provide only when using the random-permutation option. Standard deviation of the gaussian distributed noise determining how much the rows and columns of the randomly sorted matrix are scrambled.

              • -
              • seed (int) – Provide only when using the random-permutation +

              • seed (int) – Provide only when using the random-permutation option. A seed to use for drawing samples from a normal distribution.

              • -
              • sparse (bool) – Whether the output should be a sparse matrix or a +

              • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

              @@ -181,7 +183,7 @@

              Setup
              -

              Creation

              +

              Creation

              After the Ewald sum matrix has been set up, it may be used on periodic atomic structures with the create()-method.

              # Creation
              @@ -211,39 +213,39 @@ 

              Creation
              • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

              • -
              • accuracy (float) – The accuracy to which the sum is converged to. +

              • accuracy (float) – The accuracy to which the sum is converged to. Corresponds to the variable \(A\) in https://doi.org/10.1080/08927022.2013.840898. Used only if g_cut, r_cut and a have not been specified. Provide either one value or a list of values for each system.

              • -
              • w (float) – Weight parameter that represents the relative +

              • w (float) – Weight parameter that represents the relative computational expense of calculating a term in real and reciprocal space. This has little effect on the total energy, but may influence speed of computation in large systems. Note that this parameter is used only when the cutoffs and a are set to None. Provide either one value or a list of values for each system.

              • -
              • r_cut (float) – Real space cutoff radius dictating how many terms are +

              • r_cut (float) – Real space cutoff radius dictating how many terms are used in the real space sum. Provide either one value or a list of values for each system.

              • -
              • g_cut (float) – Reciprocal space cutoff radius. Provide either one +

              • g_cut (float) – Reciprocal space cutoff radius. Provide either one value or a list of values for each system.

              • -
              • a (float) – The screening parameter that controls the width of the +

              • a (float) – The screening parameter that controls the width of the Gaussians. If not provided, a default value of \(\alpha = \sqrt{\pi}\left(\frac{N}{V^2}\right)^{1/6}\) is used. Corresponds to the standard deviation of the Gaussians. Provide either one value or a list of values for each system.

              • -
              • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

              • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

              • -
              • only_physical_cores (bool) – If a negative n_jobs is given, +

              • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

              • -
              • verbose (bool) – Controls whether to print the progress of each job +

              • verbose (bool) – Controls whether to print the progress of each job into to the console.

              @@ -268,11 +270,11 @@

              Creation -

              Examples

              +

              Examples

              The following examples demonstrate usage of the descriptor. These examples are also available in dscribe/examples/ewaldsummatrix.py.

              -

              Accuracy

              +

              Accuracy

              Easiest way to control the accuracy of the Ewald summation is to use the accuracy-parameter. Lower values of this parameter correspond to tighter convergence criteria and better accuracy.

              @@ -286,7 +288,7 @@

              Accuracy -

              Total electrostatic energy

              +

              Total electrostatic energy

              Let’s calculate the electrostatic energy of a crystal by using the information contained in the Ewald sum matrix.

              # Ewald summation parameters
              diff --git a/docs/2.1.x/tutorials/descriptors/lmbtr.html b/docs/2.1.x/tutorials/descriptors/lmbtr.html
              index 67faeecd..8e5e2c41 100644
              --- a/docs/2.1.x/tutorials/descriptors/lmbtr.html
              +++ b/docs/2.1.x/tutorials/descriptors/lmbtr.html
              @@ -1,23 +1,25 @@
               
              -
              +
               
              -  
              +  
               
                 
                 Local Many-body Tensor Representation — DScribe 2.1.x documentation
              -      
              -      
              -      
              +      
              +      
              +      
              +
              +  
                 
                 
              -        
              -        
              -        
              -        
              -        
              -        
              +        
              +        
              +        
              +        
              +        
              +        
                       
                   
                   
              @@ -109,7 +111,7 @@
                          
              -

              Local Many-body Tensor Representation

              +

              Local Many-body Tensor Representation

              As the name suggests, the Local Many-body Tensor Representation (LMBTR) is a modification of MBTR for local environments. It is advisable to first check out the MBTR tutorial to understand the basics of the MBTR framework. The main @@ -132,7 +134,7 @@

              Local Many-body Tensor Representation -

              Setup

              +

              Setup

              Instantiating an LMBTR descriptor can be done as follows:

              from dscribe.descriptors import LMBTR
               from ase.build import bulk
              @@ -152,11 +154,11 @@ 

              Setup

              The arguments have the following effect:

              -LMBTR.__init__(geometry=None, grid=None, weighting=None, normalize_gaussians=True, normalization='none', species=None, periodic=False, sparse=False, dtype='float64')[source]
              +LMBTR.__init__(geometry=None, grid=None, weighting=None, normalize_gaussians=True, normalization='none', species=None, periodic=False, sparse=False, dtype='float64')[source]
              Parameters:
                -
              • geometry (dict) –

                Setup the geometry function. +

              • geometry (dict) –

                Setup the geometry function. For example:

                "geometry": {"function": "distance"}
                 
                @@ -185,7 +187,7 @@

                Setup

              -
            • grid (dict) –

              Setup the discretization grid. +

            • grid (dict) –

              Setup the discretization grid. For example:

              "grid": {"min": 0.1, "max": 2, "sigma": 0.1, "n": 50}
               
              @@ -195,7 +197,7 @@

              Setup deviation of the gaussian broadening and n is the number of points sampled on the grid.

            • -
            • weighting (dict) –

              Setup the weighting function and its parameters. +

            • weighting (dict) –

              Setup the weighting function and its parameters. For example:

              "weighting" : {"function": "exp", "r_cut": 10, "threshold": 1e-3}
               
              @@ -245,11 +247,11 @@

              Setup added, which changes the value of \(y\). If a value for it is not provided, it defaults to 2.

            • -
            • normalize_gaussians (bool) – Determines whether the gaussians are +

            • normalize_gaussians (bool) – Determines whether the gaussians are normalized to an area of 1. Defaults to True. If False, the normalization factor is dropped and the gaussians have the form. \(e^{-(x-\mu)^2/2\sigma^2}\)

            • -
            • normalization (str) –

              Determines the method for normalizing the +

            • normalization (str) –

              Determines the method for normalizing the output. The available options are:

            • -

              Creation

              +

              Creation

              After LMBTR has been set up, it may be used on atomic structures with the create()-method.

              from ase.build import molecule
              @@ -305,22 +307,22 @@ 

              Creation
              • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

              • -
              • centers (list) – Centers where to calculate LMBTR. Can be +

              • centers (list) – Centers where to calculate LMBTR. Can be provided as cartesian positions or atomic indices. If no centers are defined, the LMBTR output will be created for all atoms in the system. When calculating LMBTR for multiple systems, provide the centers as a list for each system.

              • -
              • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

              • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

              • -
              • only_physical_cores (bool) – If a negative n_jobs is given, +

              • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

              • -
              • verbose (bool) – Controls whether to print the progress of each job +

              • verbose (bool) – Controls whether to print the progress of each job into to the console.

              @@ -341,11 +343,11 @@

              Creationget_number_of_features()-method.

              -

              Examples

              +

              Examples

              The following examples demonstrate common use cases for the descriptor. These examples are also available in dscribe/examples/lmbtr.py.

              -

              Adsorption site analysis

              +

              Adsorption site analysis

              This example demonstrate the use of LMBTR as a way of analysing local sites in a structure. We build an Al(111) surface and analyze four different adsorption sites on this surface: top, bridge, hcp and fcc.

              @@ -399,7 +401,7 @@

              Adsorption site analysisLMBTR sites

              The LMBTR k=2 fingerprints for different adsoprtion sites on an Al(111) -surface.

              +surface.

              Correctly tuned, such information could for example be used to train an diff --git a/docs/2.1.x/tutorials/descriptors/mbtr.html b/docs/2.1.x/tutorials/descriptors/mbtr.html index 8f75dbdd..28e13144 100644 --- a/docs/2.1.x/tutorials/descriptors/mbtr.html +++ b/docs/2.1.x/tutorials/descriptors/mbtr.html @@ -1,23 +1,25 @@ - + - + Many-body Tensor Representation — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -109,7 +111,7 @@

              -

              Many-body Tensor Representation

              +

              Many-body Tensor Representation

              The many-body tensor representation (MBTR) [1] encodes a structure by using a distribution of different structural motifs. It can be used directly for both finite and periodic systems. MBTR is especially suitable for @@ -123,11 +125,11 @@

              Many-body Tensor Representation MBTR stratification
              -

              Illustration of the MBTR output for a water molecule.

              +

              Illustration of the MBTR output for a water molecule.

              -

              Setup

              +

              Setup

              Instantiating an MBTR descriptor can be done as follows:

              from dscribe.descriptors import MBTR
               
              @@ -145,11 +147,11 @@ 

              Setup

              The arguments have the following effect:

              -MBTR.__init__(geometry=None, grid=None, weighting=None, normalize_gaussians=True, normalization='none', species=None, periodic=False, sparse=False, dtype='float64')[source]
              +MBTR.__init__(geometry=None, grid=None, weighting=None, normalize_gaussians=True, normalization='none', species=None, periodic=False, sparse=False, dtype='float64')[source]
              Parameters:
                -
              • geometry (dict) –

                Setup the geometry function. +

              • geometry (dict) –

                Setup the geometry function. For example:

                "geometry": {"function": "atomic_number"}
                 
                @@ -185,7 +187,7 @@

                Setup

              -
            • grid (dict) –

              Setup the discretization grid. +

            • grid (dict) –

              Setup the discretization grid. For example:

              "grid": {"min": 0.1, "max": 2, "sigma": 0.1, "n": 50}
               
              @@ -195,7 +197,7 @@

              Setup deviation of the gaussian broadening and n is the number of points sampled on the grid.

            • -
            • weighting (dict) –

              Setup the weighting function and its parameters. +

            • weighting (dict) –

              Setup the weighting function and its parameters. For example:

              "weighting" : {"function": "exp", "r_cut": 10, "threshold": 1e-3}
               
              @@ -252,11 +254,11 @@

              Setup added, which changes the value of \(y\). If a value for it is not provided, it defaults to 2.

            • -
            • normalize_gaussians (bool) – Determines whether the gaussians are +

            • normalize_gaussians (bool) – Determines whether the gaussians are normalized to an area of 1. Defaults to True. If False, the normalization factor is dropped and the gaussians have the form. \(e^{-(x-\mu)^2/2\sigma^2}\)

            • -
            • normalization (str) –

              Determines the method for normalizing the +

            • normalization (str) –

              Determines the method for normalizing the output. The available options are:

            • Descriptor name

              - +---+++ @@ -343,7 +345,7 @@

              Setup

              The geometry and weighting functionsThe geometry and weighting functions
              -

              Creation

              +

              Creation

              After MBTR has been set up, it may be used on atomic structures with the create()-method.

              from ase.build import molecule
              @@ -366,17 +368,17 @@ 

              CreationParameters:
              • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

              • -
              • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

              • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

              • -
              • only_physical_cores (bool) – If a negative n_jobs is given, +

              • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

              • -
              • verbose (bool) – Controls whether to print the progress of each job +

              • verbose (bool) – Controls whether to print the progress of each job into to the console.

              @@ -395,11 +397,11 @@

              Creationget_number_of_features()-method.

              -

              Examples

              +

              Examples

              The following examples demonstrate common use cases for the descriptor. These examples are also available in dscribe/examples/mbtr.py.

              -

              Locating information

              +

              Locating information

              If the MBTR setup has been specified with flatten=True, the output is flattened into a single vector and it can become difficult to identify which parts correspond to which element combinations. To overcome this, the MBTR class @@ -416,7 +418,7 @@

              Locating information

              -

              Visualization

              +

              Visualization

              The MBTR output vector can be visualized easily. The following snippet demonstrates how the output for \(k=2\) can be visualized with matplotlib.

              from ase.build import bulk
              @@ -457,12 +459,12 @@ 

              VisualizationMBTR k=2

              The MBTR output for k=2. The graphs for Na-Na and Cl-Cl overlap due to their -identical arrangement in the crystal.

              +identical arrangement in the crystal.

              -

              Finite systems

              +

              Finite systems

              For finite systems we have to specify periodic=False in the constructor. Finite systems can not have Valle-Oganov normalization, and an exception is raised if that is given. The need to apply weighting depends on the size of the system: for small @@ -503,12 +505,12 @@

              Finite systemsThe MBTR output for C60 without weighting and with exponential weighting for \(k=2\). Without the weighting the carbon pairs that are far away will -have the highest intensity and dominate the output.

              +have the highest intensity and dominate the output.

              -

              Normalization

              +

              Normalization

              Depending on the application, the preprocessing of the MBTR vector before feeding it into a machine learing model may be beneficial. Normalization is one of the methods that can be used to preprocess the output. Here we go @@ -542,7 +544,7 @@

              Finite systems -

              Periodic systems

              +

              Periodic systems

              When applying MBTR to periodic systems, use periodic=True in the constructor. For periodic systems a weighting function needs to be defined, and an exception is raised if it is not given. The weighting essentially determines how many @@ -593,7 +595,7 @@

              Periodic systemsThe raw MBTR output for different cells representing the same crystal. The shapes in the output are the same, but the intensities are different -(intensities are integer multiples of the primitive system output)

              +(intensities are integer multiples of the primitive system output)

              However, if the output is normalized (see the example about different @@ -616,7 +618,7 @@

              Periodic systemsThe normalized MBTR output for different cells representing the same crystal. After normalising the output with normalization='l2_each', -the outputs become identical.

              +the outputs become identical.

              DScribe achieves the completely identical MBTR output for different periodic @@ -625,6 +627,7 @@

              Periodic systems +
              [1]

              Haoyan Huo and Matthias Rupp. Unified representation of molecules and crystals for machine learning. arXiv e-prints, pages arXiv:1704.06439, Apr 2017. arXiv:1704.06439.

              diff --git a/docs/2.1.x/tutorials/descriptors/sine_matrix.html b/docs/2.1.x/tutorials/descriptors/sine_matrix.html index 928f9b27..84a8532f 100644 --- a/docs/2.1.x/tutorials/descriptors/sine_matrix.html +++ b/docs/2.1.x/tutorials/descriptors/sine_matrix.html @@ -1,23 +1,25 @@ - + - + Sine matrix — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -109,7 +111,7 @@
              -

              Sine matrix

              +

              Sine matrix

              The sine matrix [1] captures features of interacting atoms in a periodic system with a very low computational cost. The matrix elements are defined by

              @@ -127,7 +129,7 @@

              Sine matrix -

              Setup

              +

              Setup

              Instantiating the object that is used to create Sine matrices can be done as follows:

              from dscribe.descriptors import SineMatrix
              @@ -143,11 +145,11 @@ 

              Setup

              The constructor takes the following parameters:

              -SineMatrix.__init__(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False, dtype='float64')
              +SineMatrix.__init__(n_atoms_max, permutation='sorted_l2', sigma=None, seed=None, sparse=False, dtype='float64')
              Parameters:
                -
              • n_atoms_max (int) – The maximum nuber of atoms that any of the +

              • n_atoms_max (int) – The maximum nuber of atoms that any of the samples can have. This controls how much zeros need to be padded to the final result.

              • permutation (string) –

                Defines the method for handling permutational @@ -166,14 +168,14 @@

                Setup

            • -
            • sigma (float) – Provide only when using the random-permutation +

            • sigma (float) – Provide only when using the random-permutation option. Standard deviation of the gaussian distributed noise determining how much the rows and columns of the randomly sorted matrix are scrambled.

            • -
            • seed (int) – Provide only when using the random-permutation +

            • seed (int) – Provide only when using the random-permutation option. A seed to use for drawing samples from a normal distribution.

            • -
            • sparse (bool) – Whether the output should be a sparse matrix or a +

            • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

            @@ -182,7 +184,7 @@

            Setup
            -

            Creation

            +

            Creation

            After the Sine matrix has been set up, it may be used on periodic atomic structures with the create()-method.

            from ase.build import bulk
            @@ -211,17 +213,17 @@ 

            Creation
            • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

            • -
            • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

            • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

            • -
            • only_physical_cores (bool) – If a negative n_jobs is given, +

            • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

            • -
            • verbose (bool) – Controls whether to print the progress of each job +

            • verbose (bool) – Controls whether to print the progress of each job into to the console.

            @@ -246,11 +248,11 @@

            Creation -

            Examples

            +

            Examples

            The following examples demonstrate usage of the descriptor. These examples are also available in dscribe/examples/sinematrix.py.

            -

            Interaction in a periodic crystal

            +

            Interaction in a periodic crystal

            The following code calculates the interaction value, as defined by the sine matrix, between two aluminum atoms in an FCC-lattice. The values are calculated in the xy-plane.

            @@ -301,13 +303,14 @@

            Interaction in a periodic crystal sine matrix
            -

            Illustration of the periodic interaction defined by the sine matrix.

            +

            Illustration of the periodic interaction defined by the sine matrix.

            From the figure one can see that the sine matrix correctly encodes the periodicity of the lattice. Notice that the shape of the interaction is however not perfectly spherical.

            +
            [1]

            Felix Faber, Alexander Lindmaa, O. Anatole von Lilienfeld, and Rickard Armiento. Crystal structure representations for machine learning models of formation energies. International Journal of Quantum Chemistry, 115(16):1094–1101, 8 2015. doi:10.1002/qua.24917.

            diff --git a/docs/2.1.x/tutorials/descriptors/soap.html b/docs/2.1.x/tutorials/descriptors/soap.html index 8d4f9c50..423b4dc5 100644 --- a/docs/2.1.x/tutorials/descriptors/soap.html +++ b/docs/2.1.x/tutorials/descriptors/soap.html @@ -1,23 +1,25 @@ - + - + Smooth Overlap of Atomic Positions — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -109,7 +111,7 @@
            -

            Smooth Overlap of Atomic Positions

            +

            Smooth Overlap of Atomic Positions

            Smooth Overlap of Atomic Positions (SOAP) is a descriptor that encodes regions of atomic geometries by using a local expansion of a gaussian smeared atomic density with orthonormal functions based on spherical harmonics and radial @@ -174,7 +176,7 @@

            Smooth Overlap of Atomic Positions -

            Setup

            +

            Setup

            Instantiating the object that is used to create SOAP can be done as follows:

            from dscribe.descriptors import SOAP
             
            @@ -196,23 +198,23 @@ 

            Setup

            The constructor takes the following parameters:

            -SOAP.__init__(r_cut=None, n_max=None, l_max=None, sigma=1.0, rbf='gto', weighting=None, average='off', compression={'mode': 'off', 'species_weighting': None}, species=None, periodic=False, sparse=False, dtype='float64')[source]
            +SOAP.__init__(r_cut=None, n_max=None, l_max=None, sigma=1.0, rbf='gto', weighting=None, average='off', compression={'mode': 'off', 'species_weighting': None}, species=None, periodic=False, sparse=False, dtype='float64')[source]
            Parameters:
              -
            • r_cut (float) – A cutoff for local region in angstroms. Should be +

            • r_cut (float) – A cutoff for local region in angstroms. Should be bigger than 1 angstrom for the gto-basis.

            • -
            • n_max (int) – The number of radial basis functions.

            • -
            • l_max (int) – The maximum degree of spherical harmonics.

            • -
            • sigma (float) – The standard deviation of the gaussians used to expand the +

            • n_max (int) – The number of radial basis functions.

            • +
            • l_max (int) – The maximum degree of spherical harmonics.

            • +
            • sigma (float) – The standard deviation of the gaussians used to expand the atomic density.

            • -
            • rbf (str) –

              The radial basis functions to use. The available options are:

              +
            • rbf (str) –

              The radial basis functions to use. The available options are:

              • "gto": Spherical gaussian type orbitals defined as \(g_{nl}(r) = \sum_{n'=1}^{n_\mathrm{max}}\,\beta_{nn'l} r^l e^{-\alpha_{n'l}r^2}\)

              • "polynomial": Polynomial basis defined as \(g_{n}(r) = \sum_{n'=1}^{n_\mathrm{max}}\,\beta_{nn'} (r-r_\mathrm{cut})^{n'+2}\)

            • -
            • weighting (dict) –

              Contains the options which control the +

            • weighting (dict) –

              Contains the options which control the weighting of the atomic density. Leave unspecified if you do not wish to apply any weighting. The dictionary may contain the following entries:

              @@ -271,7 +273,7 @@

              Setup for the central atoms.

            -
          • average (str) –

            The averaging mode over the centers of interest. +

          • average (str) –

            The averaging mode over the centers of interest. Valid options are:

              @@ -281,7 +283,7 @@

              Setup

          • -
          • compression (dict) –

            Contains the options which specify the feature compression to apply. +

          • compression (dict) –

            Contains the options which specify the feature compression to apply. Applying compression can slightly reduce the accuracy of models trained on the feature representation but can also dramatically reduce the size of the feature vector and hence the computational cost. Options are:

            @@ -325,12 +327,12 @@

            Setup encountered when creating the descriptors for a set of systems. Keeping the number of chemical species as low as possible is preferable.

          • -
          • periodic (bool) – Set to True if you want the descriptor output to +

          • periodic (bool) – Set to True if you want the descriptor output to respect the periodicity of the atomic systems (see the pbc-parameter in the constructor of ase.Atoms).

          • -
          • sparse (bool) – Whether the output should be a sparse matrix or a +

          • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

          • -
          • dtype (str) –

            The data type of the output. Valid options are:

            +
          • dtype (str) –

            The data type of the output. Valid options are:

          • -

            Creation

            +

            Creation

            After SOAP has been set up, it may be used on atomic structures with the create()-method.

            from ase.build import molecule
            @@ -378,22 +380,22 @@ 

            Creation
            • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

            • -
            • centers (list) – Centers where to calculate SOAP. Can be +

            • centers (list) – Centers where to calculate SOAP. Can be provided as cartesian positions or atomic indices. If no centers are defined, the SOAP output will be created for all atoms in the system. When calculating SOAP for multiple systems, provide the centers as a list for each system.

            • -
            • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

            • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

            • -
            • only_physical_cores (bool) – If a negative n_jobs is given, +

            • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

            • -
            • verbose (bool) – Controls whether to print the progress of each job +

            • verbose (bool) – Controls whether to print the progress of each job into to the console.

            @@ -416,11 +418,11 @@

            Creationget_number_of_features()-method.

            -

            Examples

            +

            Examples

            The following examples demonstrate common use cases for the descriptor. These examples are also available in dscribe/examples/soap.py.

            -

            Finite systems

            +

            Finite systems

            Adding SOAP to water is as easy as:

            from ase.build import molecule
             
            @@ -448,7 +450,7 @@ 

            Finite systems -

            Periodic systems

            +

            Periodic systems

            Crystals can also be SOAPed by simply setting periodic=True in the SOAP constructor and ensuring that the ase.Atoms objects have a unit cell and their periodic boundary conditions are set with the pbc-option.

            @@ -475,7 +477,7 @@

            Periodic systems -

            Weighting

            +

            Weighting

            The default SOAP formalism weights the atomic density equally no matter how far it is from the the position of interest. Especially in systems with uniform atomic density this can lead to the atoms in farther away regions @@ -507,7 +509,7 @@

            Periodic systemsExample instances of weighting functions defined on the interval [0, 1]. The poly function decays exactly to zero at \(r=r_0\), the others -decay smoothly towards zero.

            +decay smoothly towards zero.

            When using a weighting function, you typically will also want to restrict @@ -519,7 +521,7 @@

            Periodic systems -

            Locating information

            +

            Locating information

            The SOAP class provides the get_location()-method. This method can be used to query for the slice that contains a specific element combination. The following example demonstrates its usage.

            @@ -535,7 +537,7 @@

            Locating information

            -

            Sparse output

            +

            Sparse output

            For more information on the reasoning behind sparse output and its usage check our separate documentation on sparse output. Enabling sparse output on SOAP is as easy as setting sparse=True:

            @@ -562,7 +564,7 @@

            Sparse output -

            Average output

            +

            Average output

            One way of turning a local descriptor into a global descriptor is simply by taking the average over all sites. DScribe supports two averaging modes: inner and outer. The inner average is taken over the sites before summing @@ -611,6 +613,7 @@

            Average output +
            [1]

            Sandip De, Albert P. Bartók, Gábor Csányi, and Michele Ceriotti. Comparing molecules and solids across structural and alchemical space. Physical Chemistry Chemical Physics, 18(20):13754–13769, 2016. doi:10.1039/c6cp00415f.

            diff --git a/docs/2.1.x/tutorials/descriptors/valleoganov.html b/docs/2.1.x/tutorials/descriptors/valleoganov.html index 505db0ad..87f08941 100644 --- a/docs/2.1.x/tutorials/descriptors/valleoganov.html +++ b/docs/2.1.x/tutorials/descriptors/valleoganov.html @@ -1,23 +1,25 @@ - + - + Valle-Oganov descriptor — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -109,7 +111,7 @@
            -

            Valle-Oganov descriptor

            +

            Valle-Oganov descriptor

            Implementation of the fingerprint descriptor by Valle and Oganov [1] for \(k=2\) and \(k=3\) [2]. Note that the descriptor is implemented as a subclass @@ -129,7 +131,7 @@

            Valle-Oganov descriptor

            -

            Setup

            +

            Setup

            Instantiating a Valle-Oganov descriptor can be done as follows:

            import numpy as np
             from dscribe.descriptors import ValleOganov
            @@ -147,7 +149,7 @@ 

            Setup

            The arguments have the following effect:

            -ValleOganov.__init__(species, function, n, sigma, r_cut, sparse=False, dtype='float64')[source]
            +ValleOganov.__init__(species, function, n, sigma, r_cut, sparse=False, dtype='float64')[source]
            Parameters:

            -
          • n (int) – Number of discretization points.

          • -
          • sigma (float) – Standard deviation of the gaussian broadening

          • -
          • r_cut (float) – Radial cutoff.

          • -
          • sparse (bool) – Whether the output should be a sparse matrix or a +

          • n (int) – Number of discretization points.

          • +
          • sigma (float) – Standard deviation of the gaussian broadening

          • +
          • r_cut (float) – Radial cutoff.

          • +
          • sparse (bool) – Whether the output should be a sparse matrix or a dense numpy array.

          • -
          • dtype (str) –

            The data type of the output. Valid options are:

            +
          • dtype (str) –

            The data type of the output. Valid options are:

          • -

            Creation

            +

            Creation

            After the descriptor has been set up, it may be used on atomic structures with the create()-method.

            from ase import Atoms
            @@ -236,17 +238,17 @@ 

            CreationParameters:
            • system (ase.Atoms or list of ase.Atoms) – One or many atomic structures.

            • -
            • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes +

            • n_jobs (int) – Number of parallel jobs to instantiate. Parallellizes the calculation across samples. Defaults to serial calculation with n_jobs=1. If a negative number is given, the used cpus will be calculated with, n_cpus + n_jobs, where n_cpus is the amount of CPUs as reported by the OS. With only_physical_cores you can control which types of CPUs are counted in n_cpus.

            • -
            • only_physical_cores (bool) – If a negative n_jobs is given, +

            • only_physical_cores (bool) – If a negative n_jobs is given, determines which types of CPUs are used in calculating the number of jobs. If set to False (default), also virtual CPUs are counted. If set to True, only physical CPUs are counted.

            • -
            • verbose (bool) – Controls whether to print the progress of each job +

            • verbose (bool) – Controls whether to print the progress of each job into to the console.

            @@ -265,11 +267,11 @@

            Creationget_number_of_features()-method.

            -

            Examples

            +

            Examples

            The following examples demonstrate some use cases for the descriptor. These examples are also available in dscribe/examples/valleoganov.py.

            -

            Visualization

            +

            Visualization

            The following snippet demonstrates how the output for \(k=2\) can be visualized with matplotlib. Visualization works very similarly to MBTR.

            import matplotlib.pyplot as plt
            @@ -312,12 +314,12 @@ 

            VisualizationValle-Oganov k=2

            The Valle-Oganov output for k=2. The graphs for Na-Na and Cl-Cl overlap due to their -identical arrangement in the crystal.

            +identical arrangement in the crystal.

            -

            Setup with MBTR class

            +

            Setup with MBTR class

            For comparison, the setup for Valle-Oganov descriptor for the previous structure, but using the MBTR class, would look like the following.

            from dscribe.descriptors import MBTR
            @@ -337,7 +339,7 @@ 

            Setup with MBTR class

            -

            Side by side with MBTR output

            +

            Side by side with MBTR output

            A graph of the output for the same structure created with different descriptors. Also demonstrates how the Valle-Oganov normalization for k2 term converges at 1.

            nacl = bulk("NaCl", "rocksalt", a=5.64)
             
            @@ -382,10 +384,11 @@ 

            Side by side with MBTR output Valle-Oganov and MBTR comparison
            -

            Outputs for k=2. For the sake of clarity, the cutoff distance has been lengthened and only the Na-Cl pair has been plotted.

            +

            Outputs for k=2. For the sake of clarity, the cutoff distance has been lengthened and only the Na-Cl pair has been plotted.

            +
            [1]

            Mario Valle and Artem R Oganov. Crystal fingerprint space–a novel paradigm for studying crystal-structure sets. Acta Crystallographica Section A: Foundations of Crystallography, 66(5):507–517, 2010.

            diff --git a/docs/2.1.x/tutorials/machine_learning/clustering.html b/docs/2.1.x/tutorials/machine_learning/clustering.html index 5040a589..1e82eb7e 100644 --- a/docs/2.1.x/tutorials/machine_learning/clustering.html +++ b/docs/2.1.x/tutorials/machine_learning/clustering.html @@ -1,23 +1,25 @@ - + - + Unsupervised Learning: Clustering — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -103,14 +105,14 @@
            -

            Unsupervised Learning: Clustering

            +

            Unsupervised Learning: Clustering

            In this tutorial we take a look at how the descriptors can be used to perform a common unsupervised learning task called clustering. In clustering we are using an unlabeled dataset of input values – in this case the feature vectors that DScribe outputs – to train a model that organizes these inputs into meaningful groups/clusters.

            -

            Setup

            +

            Setup

            We will try to find structurally similar locations on top of an copper FCC(111)-surface. To do this, we will first calculate a set of SOAP vectors on top of the surface. To simplify things, we will only consider a single plane 1 @@ -118,7 +120,7 @@

            Setup
            FCC(111) surface
            -

            The used copper FCC(111) surface as viewed from above.

            +

            The used copper FCC(111) surface as viewed from above.

            This dataset will be used as input for a clustering model. We will use one of @@ -134,7 +136,7 @@

            Setup essentially biasing our model.

            -

            Dataset generation

            +

            Dataset generation

            The following script generates our training dataset:

            import numpy as np
             import ase
            @@ -183,7 +185,7 @@ 

            Dataset generation -

            Training

            +

            Training

            Let’s load the dataset and fit our model:

            import numpy as np
             from matplotlib import pyplot as plt
            @@ -209,7 +211,7 @@ 

            Training -

            Analysis

            +

            Analysis

            When the training is done (takes few seconds), we can visually examine the clustering. Here we simply plot the sampled points and colour them based on the cluster that was assigned by our model.

            @@ -232,7 +234,7 @@

            Analysis Lennard-Jones energies
            -

            The k-means clustering result.

            +

            The k-means clustering result.

            We can see that our simple clustering setup is able to determine similar diff --git a/docs/2.1.x/tutorials/machine_learning/forces_and_energies.html b/docs/2.1.x/tutorials/machine_learning/forces_and_energies.html index 67275b9c..5df620bd 100644 --- a/docs/2.1.x/tutorials/machine_learning/forces_and_energies.html +++ b/docs/2.1.x/tutorials/machine_learning/forces_and_energies.html @@ -1,23 +1,25 @@ - + - + Supervised Learning: Training an ML Force-field — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -104,7 +106,7 @@

            -

            Supervised Learning: Training an ML Force-field

            +

            Supervised Learning: Training an ML Force-field

            This tutorial covers how descriptors can be effectively used as input for a machine learning model that will predict energies and forces. There are several design choices that you have to make when building a ML force-field: which ML @@ -131,7 +133,7 @@

            Supervised Learning: Training an ML Force-field -

            Setup

            +

            Setup

            We will use a dataset of feature vectors \(\mathbf{D}\), their derivatives \(\nabla_{\mathbf{r_i}} \mathbf{D}\) and the associated system energies \(E\) and forces \(\mathbf{F}\) for training. We will use a neural network \(f\) @@ -167,7 +169,7 @@

            Setup variance in the training set.

            -

            Dataset generation

            +

            Dataset generation

            The following script generates our training dataset (full script in the GitHub repository: examples/forces_and_energies/dataset.py):

            import numpy as np
            @@ -228,7 +230,7 @@ 

            Dataset generationLennard-Jones energies

            -

            Training

            +

            Training

            Note

            The training code shown in this tutorial uses pytorch, which you need to install if you wish to run this @@ -445,7 +447,7 @@

            Training -

            Analysis

            +

            Analysis

            In order to quickly assess the model performance, we will simply plot the model response in the whole dataset input domain and compare it to the correct values (full script in the GitHub repository: diff --git a/docs/2.1.x/tutorials/similarity_analysis/kernels.html b/docs/2.1.x/tutorials/similarity_analysis/kernels.html index c3945fa6..21477554 100644 --- a/docs/2.1.x/tutorials/similarity_analysis/kernels.html +++ b/docs/2.1.x/tutorials/similarity_analysis/kernels.html @@ -1,23 +1,25 @@ - + - + Building similarity kernels from local environments — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -101,7 +103,7 @@

            -

            Building similarity kernels from local environments

            +

            Building similarity kernels from local environments

            Measuring the similarity of structures becomes easy when the feature vectors represent the whole structure, such as in the case of Coulomb matrix or MBTR. In these cases the feature vectors are directly comparable with different @@ -113,7 +115,7 @@

            Building similarity kernels from local environments[1].

            -

            Average kernel

            +

            Average kernel

            The simplest approach is to average over the local contributions to create a global similarity measure. This average kernel \(K\) is defined as:

            @@ -153,7 +155,7 @@

            Average kernel -

            REMatch kernel

            +

            REMatch kernel

            The REMatch kernel lets you choose between the best match of local environments and the averaging strategy. The parameter \(\alpha\) determines the contribution of the two: \(\alpha = 0\) means only the similarity of @@ -200,6 +202,7 @@

            REMatch kernel +
            [1]

            Sandip De, Albert P. Bartók, Gábor Csányi, and Michele Ceriotti. Comparing molecules and solids across structural and alchemical space. Phys. Chem. Chem. Phys., 18(20):13754–13769, 2016. arXiv:1601.04077.

            diff --git a/docs/2.1.x/tutorials/sparse.html b/docs/2.1.x/tutorials/sparse.html index 113c7791..433d9f79 100644 --- a/docs/2.1.x/tutorials/sparse.html +++ b/docs/2.1.x/tutorials/sparse.html @@ -1,23 +1,25 @@ - + - + Sparse output — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -102,7 +104,7 @@
            -

            Sparse output

            +

            Sparse output

            Many of the descriptors become very sparse when using a large chemical space, or when calculating derivatives. Because of this, DScribe provides the possibility of creating the output in a sparse format. The sparse output simply @@ -114,7 +116,7 @@

            Sparse outputsparse.COO supports n-dimensional sparse output with a convenient slicing syntax.

            -

            Persistence

            +

            Persistence

            In order to save/load the sparse output you will need to use the sparse.save_npz/sparse.load_npz functions from the sparse library. The following example demonstrates this:

            import sparse
            @@ -147,7 +149,7 @@ 

            Persistence -

            Conversion

            +

            Conversion

            Many external libraries still only support either dense numpy arrays or the 2D sparse matrices from scipy.sparse. This is mostly due to the efficient linear algebra routines that are implemented for them. Whenever you need such diff --git a/docs/2.1.x/tutorials/tutorials.html b/docs/2.1.x/tutorials/tutorials.html index 78bcf5f4..0be76fbc 100644 --- a/docs/2.1.x/tutorials/tutorials.html +++ b/docs/2.1.x/tutorials/tutorials.html @@ -1,23 +1,26 @@ - + - + Tutorials — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + + @@ -117,9 +120,9 @@

            -

            Tutorials

            +

            Tutorials

            -

            Basics

            +

            Basics

            We provide several tutorials that will help you get acquainted with DScribe and descriptors in general. If you do not have much experience with descriptors, or you simply want to refresh your memory, the tutorial on Basic concepts is a great place to start.

            @@ -132,7 +135,7 @@

            Basics

            -

            Descriptors

            +

            Descriptors

            We have provided a basic tutorial for each descriptor included in DScribe. These tutorials briefly introduce the descriptor and demonstrate their basic call signature. We have also included several examples that should cover many @@ -151,7 +154,7 @@

            Descriptors -

            Machine Learning

            +

            Machine Learning

            In the machine learning-section you can find few real-life examples that demonstrate how DScribe can be used in machine learning applications.

            @@ -162,7 +165,7 @@

            Machine Learning -

            Visualization

            +

            Visualization

            Mapping the descriptors into a visual representation is useful in analyzing complex systems. These examples demonstrate how to achieve this with DScribe.

            @@ -172,7 +175,7 @@

            Visualization -

            Similarity Analysis

            +

            Similarity Analysis

            Measuring the similarity of structures is key to several machine learning applications — especially kernel-based methods – but these techniques are also very useful in other applications. We provide few basic tutorials on how diff --git a/docs/2.1.x/tutorials/visualization/coloring_by_environment.html b/docs/2.1.x/tutorials/visualization/coloring_by_environment.html index b87c3a70..b2033264 100644 --- a/docs/2.1.x/tutorials/visualization/coloring_by_environment.html +++ b/docs/2.1.x/tutorials/visualization/coloring_by_environment.html @@ -1,23 +1,25 @@ - + - + Chemical Environment Visualization with Local Descriptors — DScribe 2.1.x documentation - - - + + + + + - - - - - - + + + + + + @@ -100,7 +102,7 @@

            -

            Chemical Environment Visualization with Local Descriptors

            +

            Chemical Environment Visualization with Local Descriptors

            This tutorial demonstrates how one can visualize the abstract descriptor feature space by mapping it into a visual property. The goal is to give a rough idea on how to achieve this in a fairly easy scenario where the interesting structural @@ -111,7 +113,7 @@

            Chemical Environment Visualization with Local Descriptors -

            References and final system

            +

            References and final system

            We start out by creating bulk systems for two different iron phases: one for BCC and another for FCC:

            import numpy as np
            @@ -170,7 +172,7 @@ 

            References and final system -

            Coloring

            +

            Coloring

            Next we want to generate a simple metric that measures how similar the environment of each atom is to the reference FCC and BCC structures. In this example we define the metric as the Euclidean distance that is scaled to be diff --git a/docs/src/changelog.rst b/docs/src/changelog.rst index 45d608f2..657dddee 100644 --- a/docs/src/changelog.rst +++ b/docs/src/changelog.rst @@ -1,5 +1,11 @@ Changelog ========= + - 2.1.1: + - Added: + - Better validation of the input system, including checks and possible normalization of positions, cell, atomic numbers and periodic boundary conditions. + - Fixed: + - Issue with ACSF G5 calculation. See issue `#138 `_. + - 2.1.0: - Added: - New :code:`compression` option for :code:`SOAP` courtesy of `jlparkI `_. @@ -10,7 +16,7 @@ Changelog - Added: - Wheel distributions for Linux, MacOS and Windows. - Fixed: - - Issue with exception not being raised when analytical derivatives were requested for SOAP with weighting turned on. See issue `#89 `_. + - Issue with exception not being raised when analytical derivatives were requested for SOAP with weighting turned on. See issue `#113 `_. - 2.0.0: - Added: diff --git a/docs/src/index.rst b/docs/src/index.rst index 129c8251..eb66db6b 100644 --- a/docs/src/index.rst +++ b/docs/src/index.rst @@ -7,8 +7,8 @@ DScribe .. image:: https://coveralls.io/repos/github/SINGROUP/dscribe/badge.svg?branch=master :target: https://coveralls.io/github/SINGROUP/dscribe?branch=master -.. image:: https://img.shields.io/badge/code%20style-black-000000.svg - :target: https://github.com/psf/black +.. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json + :target: https://github.com/astral-sh/ruff DScribe is a Python package for transforming atomic structures into fixed-size numerical fingerprints. These fingerprints are often called "descriptors" and diff --git a/dscribe/__init__.py b/dscribe/__init__.py index 23f4bc08..ae9d37eb 100644 --- a/dscribe/__init__.py +++ b/dscribe/__init__.py @@ -13,4 +13,5 @@ See the License for the specific language governing permissions and limitations under the License. """ + from dscribe.core.system import System diff --git a/dscribe/core/__init__.py b/dscribe/core/__init__.py index 94d01dc6..12f4d679 100644 --- a/dscribe/core/__init__.py +++ b/dscribe/core/__init__.py @@ -13,5 +13,6 @@ See the License for the specific language governing permissions and limitations under the License. """ + from dscribe.core.system import System from dscribe.core.lattice import Lattice diff --git a/dscribe/core/lattice.py b/dscribe/core/lattice.py index 78d86752..a1ebe969 100644 --- a/dscribe/core/lattice.py +++ b/dscribe/core/lattice.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np diff --git a/dscribe/core/system.py b/dscribe/core/system.py index e927c4a6..b1cfb388 100644 --- a/dscribe/core/system.py +++ b/dscribe/core/system.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + from ase import Atoms import ase.geometry import numpy as np diff --git a/dscribe/descriptors/__init__.py b/dscribe/descriptors/__init__.py index 1676d4c4..877ac34c 100644 --- a/dscribe/descriptors/__init__.py +++ b/dscribe/descriptors/__init__.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + from dscribe.descriptors.acsf import ACSF from dscribe.descriptors.mbtr import MBTR from dscribe.descriptors.valleoganov import ValleOganov diff --git a/dscribe/descriptors/acsf.py b/dscribe/descriptors/acsf.py index 9889479f..1eda8f80 100644 --- a/dscribe/descriptors/acsf.py +++ b/dscribe/descriptors/acsf.py @@ -13,16 +13,12 @@ See the License for the specific language governing permissions and limitations under the License. """ -import sys import numpy as np -import sparse as sp -from scipy.sparse import coo_matrix from ase import Atoms from dscribe.descriptors.descriptorlocal import DescriptorLocal from dscribe.ext import ACSFWrapper -import dscribe.utils.geometry class ACSF(DescriptorLocal): @@ -78,15 +74,16 @@ def __init__( """ super().__init__(periodic=periodic, sparse=sparse, dtype=dtype) - self.acsf_wrapper = ACSFWrapper() - - # Setup - self.species = species - self.g2_params = g2_params - self.g3_params = g3_params - self.g4_params = g4_params - self.g5_params = g5_params - self.r_cut = r_cut + self._set_species(species) + self.acsf_wrapper = ACSFWrapper( + self.validate_r_cut(r_cut), + self.validate_g2_params(g2_params), + self.validate_g3_params(g3_params), + self.validate_g4_params(g4_params), + self.validate_g5_params(g5_params), + self._atomic_numbers, + periodic, + ) def create( self, system, centers=None, n_jobs=1, only_physical_cores=False, verbose=False @@ -186,95 +183,29 @@ def create_single(self, system, centers=None): first dimension is given by the number of centers and the second dimension is determined by the get_number_of_features()-function. """ - # Check if there are types that have not been declared - self.check_atomic_numbers(system.get_atomic_numbers()) + # Validate and normalize system + positions = self.validate_positions(system.get_positions()) + atomic_numbers = self.validate_atomic_numbers(system.get_atomic_numbers()) + pbc = self.validate_pbc(system.get_pbc()) + cell = self.validate_cell(system.get_cell(), pbc) # Create C-compatible list of atomic indices for which the ACSF is # calculated - calculate_all = False if centers is None: - calculate_all = True - indices = np.arange(len(system)) - else: - indices = centers - - # If periodicity is not requested, and the output is requested for all - # atoms, we skip all the intricate optimizations that will make things - # actually slower for this case. - if calculate_all and not self.periodic: - n_atoms = len(system) - all_pos = system.get_positions() - dmat = dscribe.utils.geometry.get_adjacency_matrix( - self.r_cut, all_pos, all_pos - ) - # Otherwise the amount of pairwise distances that are calculated is - # kept at minimum. Only distances for the given indices (and possibly - # the secondary neighbours if G4 is specified) are calculated. - else: - # Create the extended system if periodicity is requested. For ACSF only - # the distance from central atom needs to be considered in extending - # the system. - if self.periodic: - system = dscribe.utils.geometry.get_extended_system( - system, self.r_cut, return_cell_indices=False - ) - - # First calculate distances from specified centers to all other - # atoms. This is already enough for everything else except G4. - n_atoms = len(system) - all_pos = system.get_positions() - central_pos = all_pos[indices] - dmat_primary = dscribe.utils.geometry.get_adjacency_matrix( - self.r_cut, central_pos, all_pos - ) - - # Create symmetric full matrix - col = dmat_primary.col - row = [ - indices[x] for x in dmat_primary.row - ] # Fix row numbering to refer to original system - data = dmat_primary.data - dmat = coo_matrix((data, (row, col)), shape=(n_atoms, n_atoms)) - dmat_lil = dmat.tolil() - dmat_lil[col, row] = dmat_lil[row, col] - - # If G4 terms are requested, calculate also secondary neighbour distances - if len(self.g4_params) != 0: - neighbour_indices = np.unique(col) - neigh_pos = all_pos[neighbour_indices] - dmat_secondary = dscribe.utils.geometry.get_adjacency_matrix( - self.r_cut, neigh_pos, neigh_pos - ) - col = [ - neighbour_indices[x] for x in dmat_secondary.col - ] # Fix col numbering to refer to original system - row = [ - neighbour_indices[x] for x in dmat_secondary.row - ] # Fix row numbering to refer to original system - dmat_lil[row, col] = np.array(dmat_secondary.data) - - dmat = dmat_lil.tocoo() - - # Get adjancency list and full dense adjancency matrix - neighbours = dscribe.utils.geometry.get_adjacency_list(dmat) - dmat_dense = np.full( - (n_atoms, n_atoms), sys.float_info.max - ) # The non-neighbor values are treated as "infinitely far". - dmat_dense[dmat.col, dmat.row] = dmat.data + centers = np.arange(len(system)) # Calculate ACSF with C++ - output = np.array( - self.acsf_wrapper.create( - system.get_positions(), - system.get_atomic_numbers(), - dmat_dense, - neighbours, - indices, - ), - dtype=np.float64, + out = self.init_descriptor_array(len(centers)) + self.acsf_wrapper.create( + out, + positions, + atomic_numbers, + cell, + pbc, + centers, ) - return output + return out def get_number_of_features(self): """Used to inquire the final number of features that this descriptor @@ -283,11 +214,7 @@ def get_number_of_features(self): Returns: int: Number of features for this descriptor. """ - wrapper = self.acsf_wrapper - descsize = (1 + wrapper.n_g2 + wrapper.n_g3) * wrapper.n_types - descsize += (wrapper.n_g4 + wrapper.n_g5) * wrapper.n_type_pairs - - return int(descsize) + return self.acsf_wrapper.get_number_of_features() def validate_derivatives_method(self, method, attach): if not attach: @@ -313,12 +240,7 @@ def species(self, value): self._set_species(value) self.acsf_wrapper.atomic_numbers = self._atomic_numbers.tolist() - @property - def r_cut(self): - return self.acsf_wrapper.r_cut - - @r_cut.setter - def r_cut(self, value): + def validate_r_cut(self, value): """Used to check the validity of given radial cutoff. Args: @@ -326,14 +248,17 @@ def r_cut(self, value): """ if value <= 0: raise ValueError("Cutoff radius should be positive.") - self.acsf_wrapper.r_cut = value + return value @property - def g2_params(self): - return self.acsf_wrapper.get_g2_params() + def r_cut(self): + return self.acsf_wrapper.r_cut - @g2_params.setter - def g2_params(self, value): + @r_cut.setter + def r_cut(self, value): + self.acsf_wrapper.r_cut = self.validate_r_cut(value) + + def validate_g2_params(self, value): """Used to check the validity of given G2 parameters. Args: @@ -358,14 +283,17 @@ def g2_params(self, value): if np.any(value[:, 0] <= 0) is True: raise ValueError("G2 eta parameters should be positive numbers.") - self.acsf_wrapper.set_g2_params(value.tolist()) + return value.tolist() @property - def g3_params(self): - return self.acsf_wrapper.g3_params + def g2_params(self): + return self.acsf_wrapper.g2_params - @g3_params.setter - def g3_params(self, value): + @g2_params.setter + def g2_params(self, value): + self.acsf_wrapper.g2_params = self.validate_g2_params(value) + + def validate_g3_params(self, value): """Used to check the validity of given G3 parameters and to initialize the C-memory layout for them. @@ -381,14 +309,23 @@ def g3_params(self, value): if value.ndim != 1: raise ValueError("g3_params should be a vector.") - self.acsf_wrapper.g3_params = value.tolist() + return value.tolist() @property - def g4_params(self): - return self.acsf_wrapper.g4_params + def g3_params(self): + return self.acsf_wrapper.g3_params - @g4_params.setter - def g4_params(self, value): + @g3_params.setter + def g3_params(self, value): + """Used to check the validity of given G3 parameters and to + initialize the C-memory layout for them. + + Args: + value(array): List of G3 parameters. + """ + self.acsf_wrapper.g3_params = self.validate_g3_params(value) + + def validate_g4_params(self, value): """Used to check the validity of given G4 parameters and to initialize the C-memory layout for them. @@ -414,14 +351,17 @@ def g4_params(self, value): if np.any(value[:, 2] <= 0) is True: raise ValueError("3-body G4 eta parameters should be positive numbers.") - self.acsf_wrapper.g4_params = value.tolist() + return value.tolist() @property - def g5_params(self): - return self.acsf_wrapper.g5_params + def g4_params(self): + return self.acsf_wrapper.g4_params - @g5_params.setter - def g5_params(self, value): + @g4_params.setter + def g4_params(self, value): + self.acsf_wrapper.g4_params = self.validate_g4_params(value) + + def validate_g5_params(self, value): """Used to check the validity of given G5 parameters and to initialize the C-memory layout for them. @@ -447,4 +387,12 @@ def g5_params(self, value): if np.any(value[:, 2] <= 0) is True: raise ValueError("3-body G5 eta parameters should be positive numbers.") - self.acsf_wrapper.g5_params = value.tolist() + return value.tolist() + + @property + def g5_params(self): + return self.acsf_wrapper.g5_params + + @g5_params.setter + def g5_params(self, value): + self.acsf_wrapper.g5_params = self.validate_g5_params(value) diff --git a/dscribe/descriptors/coulombmatrix.py b/dscribe/descriptors/coulombmatrix.py index 8dd10e03..0e67b0bf 100644 --- a/dscribe/descriptors/coulombmatrix.py +++ b/dscribe/descriptors/coulombmatrix.py @@ -13,16 +13,12 @@ See the License for the specific language governing permissions and limitations under the License. """ -import numpy as np +import numpy as np from ase import Atoms import ase.geometry.cell -import sparse - from dscribe.descriptors.descriptormatrix import DescriptorMatrix -from dscribe.utils.dimensionality import is1d - import dscribe.ext @@ -128,16 +124,22 @@ def create_single(self, system): Returns: ndarray: The zero padded matrix as a flattened 1D array. """ + # Validate and normalize system + positions = self.validate_positions(system.get_positions()) + atomic_numbers = system.get_atomic_numbers() + pbc = self.validate_pbc(system.get_pbc()) + cell = self.validate_cell(system.get_cell(), pbc) + # Initialize output array in dense format. out_des = np.zeros((self.get_number_of_features()), dtype=np.float64) # Calculate with C++ extension self.wrapper.create( out_des, - system.get_positions(), - system.get_atomic_numbers(), - system.get_cell(), - system.get_pbc(), + positions, + atomic_numbers, + cell, + pbc, ) return out_des diff --git a/dscribe/descriptors/descriptor.py b/dscribe/descriptors/descriptor.py index b2a68ac8..b8eb96f8 100644 --- a/dscribe/descriptors/descriptor.py +++ b/dscribe/descriptors/descriptor.py @@ -13,12 +13,15 @@ See the License for the specific language governing permissions and limitations under the License. """ + from abc import ABC, abstractmethod import numpy as np import sparse as sp +import ase.geometry.cell + from dscribe.utils.species import get_atomic_numbers import joblib @@ -124,7 +127,19 @@ def _set_species(self, species): self._atomic_number_set = set(self._atomic_numbers) self._species = species - def check_atomic_numbers(self, atomic_numbers): + def validate_species(self, value): + """Used to validate the species information. + + Args: + species(iterable): Chemical species either as a list of atomic + numbers or list of chemical symbols. + + Returns: + List of atomic numbers. + """ + return get_atomic_numbers(value) + + def validate_atomic_numbers(self, atomic_numbers): """Used to check that the given atomic numbers have been defined for this descriptor. @@ -143,6 +158,50 @@ def check_atomic_numbers(self, atomic_numbers): "The following atomic numbers are not defined " "for this descriptor: {}".format(zs.difference(self._atomic_number_set)) ) + return atomic_numbers + + def validate_positions(self, positions): + """Used to check that the cartesian positions are valid. + + Args: + positions(np.ndarray): Positions to check . + + Raises: + ValueError: If the atomic numbers in the given system are not + included in the species given to this descriptor. + """ + # Check that the system does not have elements that are not in the list + # of atomic numbers + if np.isnan(positions.any()): + raise ValueError( + "The given system has a NaN value in the atomic positions." + ) + return positions + + def validate_pbc(self, pbc): + """Used to check that the given pbc cell is valid and return a + normalized value. + + Args: + pbc(np.ndarray): Cell periodicity as three booleans. + """ + return np.asarray(pbc, dtype=bool) + + def validate_cell(self, cell, pbc): + """Used to check that the given unit cell is valid. + + Args: + cell(np.ndarray): 3x3 unit cell. + pbc(np.ndarray): Cell periodicity as three booleans. + + Raises: + ValueError: If the given cell is invalid. + """ + if self.periodic and any(pbc) and cell.volume == 0: + raise ValueError( + "Cannot compute periodic descriptor on a zero-volume cell." + ) + return ase.geometry.cell.complete_cell(cell) def format_array(self, input): """Used to format a float64 numpy array in the final format that will be diff --git a/dscribe/descriptors/descriptorglobal.py b/dscribe/descriptors/descriptorglobal.py index 9d07f6e2..ba00f9ad 100644 --- a/dscribe/descriptors/descriptorglobal.py +++ b/dscribe/descriptors/descriptorglobal.py @@ -10,6 +10,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np import sparse as sp from ase import Atoms diff --git a/dscribe/descriptors/descriptorlocal.py b/dscribe/descriptors/descriptorlocal.py index 02983956..2ba3f133 100644 --- a/dscribe/descriptors/descriptorlocal.py +++ b/dscribe/descriptors/descriptorlocal.py @@ -10,8 +10,8 @@ See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np -import sparse as sp from ase import Atoms from dscribe.descriptors.descriptor import Descriptor diff --git a/dscribe/descriptors/descriptormatrix.py b/dscribe/descriptors/descriptormatrix.py index d8be8344..81a8d174 100644 --- a/dscribe/descriptors/descriptormatrix.py +++ b/dscribe/descriptors/descriptormatrix.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np from numpy.random import RandomState @@ -108,6 +109,9 @@ def create_single(self, system): Returns: ndarray: The zero padded matrix either as a 1D array. """ + # Validate positions + self.validate_positions(system.get_positions()) + # Remove the old norm vector for the new system self._norm_vector = None diff --git a/dscribe/descriptors/ewaldsummatrix.py b/dscribe/descriptors/ewaldsummatrix.py index 2e3aebdf..3979d7a5 100644 --- a/dscribe/descriptors/ewaldsummatrix.py +++ b/dscribe/descriptors/ewaldsummatrix.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + import math import numpy as np diff --git a/dscribe/descriptors/lmbtr.py b/dscribe/descriptors/lmbtr.py index 8950de11..e5184635 100644 --- a/dscribe/descriptors/lmbtr.py +++ b/dscribe/descriptors/lmbtr.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + import sys import math @@ -391,16 +392,16 @@ def create_single( centers, for k terms, as an array. These are ordered as given in centers. """ - # Check that the system does not have elements that are not in the list - # of atomic numbers - atomic_number_set = set(system.get_atomic_numbers()) - self.check_atomic_numbers(atomic_number_set) + # Validate and normalize system + self.validate_positions(system.get_positions()) + atomic_numbers = self.validate_atomic_numbers(system.get_atomic_numbers()) + pbc = self.validate_pbc(system.get_pbc()) + self.validate_cell(system.get_cell(), pbc) self._interaction_limit = len(system) system_positions = system.get_positions() - system_atomic_numbers = system.get_atomic_numbers() # Ensure that the atomic number 0 is not present in the system - if 0 in atomic_number_set: + if 0 in set(atomic_numbers): raise ValueError( "Please do not use the atomic number 0 in local MBTR as it " "is reserved to mark the atoms use as analysis centers." @@ -437,7 +438,7 @@ def create_single( indices_k2.append(i) indices_k3.append(i) new_pos_k2.append(system_positions[i]) - new_atomic_numbers_k2.append(system_atomic_numbers[i]) + new_atomic_numbers_k2.append(atomic_numbers[i]) elif isinstance(i, (list, tuple, np.ndarray)): if len(i) != 3: raise ValueError( @@ -753,12 +754,12 @@ def _get_k3(self, system, new_system, indices): # Fill in block for extended system to new system dmat_ext_to_new = scipy.spatial.distance.cdist(ext_pos, new_pos) - dmat[ - 0:n_atoms_ext, n_atoms_ext : n_atoms_ext + n_atoms_new - ] = dmat_ext_to_new - dmat[ - n_atoms_ext : n_atoms_ext + n_atoms_new, 0:n_atoms_ext - ] = dmat_ext_to_new.T + dmat[0:n_atoms_ext, n_atoms_ext : n_atoms_ext + n_atoms_new] = ( + dmat_ext_to_new + ) + dmat[n_atoms_ext : n_atoms_ext + n_atoms_new, 0:n_atoms_ext] = ( + dmat_ext_to_new.T + ) # Calculate adjacencies and the dense version dmat = dmat.tocoo() @@ -862,7 +863,7 @@ def get_location(self, species): numbers.append(specie) # Check that species exists and that X is included - self.check_atomic_numbers(numbers) + self.validate_atomic_numbers(numbers) if 0 not in numbers: raise ValueError( "The central species X (atomic number 0) has to be one of the elements." diff --git a/dscribe/descriptors/mbtr.py b/dscribe/descriptors/mbtr.py index 0d2ca97b..998418c8 100644 --- a/dscribe/descriptors/mbtr.py +++ b/dscribe/descriptors/mbtr.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + import sys import math import numpy as np @@ -401,9 +402,11 @@ def create_single(self, system): self.system = system self._interaction_limit = len(system) - # Check that the system does not have elements that are not in the list - # of atomic numbers - self.check_atomic_numbers(system.get_atomic_numbers()) + # Validate and normalize system + self.validate_positions(system.get_positions()) + self.validate_atomic_numbers(system.get_atomic_numbers()) + pbc = self.validate_pbc(system.get_pbc()) + self.validate_cell(system.get_cell(), pbc) mbtr, _ = getattr(self, f"_get_k{self.k}")(system, True, False) @@ -472,7 +475,7 @@ def get_location(self, species): numbers.append(specie) # Check that species exists - self.check_atomic_numbers(numbers) + self.validate_atomic_numbers(numbers) # Change into internal indexing numbers = [self.atomic_number_to_index[x] for x in numbers] @@ -929,7 +932,7 @@ def derivatives_analytical(self, d, c, system, indices, return_descriptor): # Check that the system does not have elements that are not in the list # of atomic numbers - self.check_atomic_numbers(system.get_atomic_numbers()) + self.validate_atomic_numbers(system.get_atomic_numbers()) mbtr, mbtr_d = getattr(self, f"_get_k{self.k}")(system, return_descriptor, True) diff --git a/dscribe/descriptors/sinematrix.py b/dscribe/descriptors/sinematrix.py index 1b6284bf..1af2acbb 100644 --- a/dscribe/descriptors/sinematrix.py +++ b/dscribe/descriptors/sinematrix.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np from ase import Atoms @@ -112,7 +113,7 @@ def get_matrix(self, system): B = system.get_cell() try: B_inv = system.get_cell_inverse() - except: + except Exception: raise ValueError( "The given system has a non-invertible cell matrix: {}.".format(B) ) diff --git a/dscribe/descriptors/soap.py b/dscribe/descriptors/soap.py index b925e03c..9c59aba6 100644 --- a/dscribe/descriptors/soap.py +++ b/dscribe/descriptors/soap.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + from warnings import warn import numpy as np @@ -306,9 +307,6 @@ def __init__( def prepare_centers(self, system, centers=None): """Validates and prepares the centers for the C++ extension.""" - # Check that the system does not have elements that are not in the list - # of atomic numbers - self.check_atomic_numbers(system.get_atomic_numbers()) # Check if periodic is valid if self.periodic: @@ -505,11 +503,15 @@ def create_single(self, system, centers=None): centers and the second dimension is determined by the get_number_of_features()-function. """ + # Validate and normalize system + positions = self.validate_positions(system.get_positions()) + atomic_numbers = self.validate_atomic_numbers(system.get_atomic_numbers()) + pbc = self.validate_pbc(system.get_pbc()) + cell = self.validate_cell(system.get_cell(), pbc) + cutoff_padding = self.get_cutoff_padding() centers, _ = self.prepare_centers(system, centers) n_centers = centers.shape[0] - pos = system.get_positions() - Z = system.get_atomic_numbers() soap_mat = self.init_descriptor_array(n_centers) # Determine the function to call based on rbf @@ -538,10 +540,10 @@ def create_single(self, system, centers=None): # Calculate analytically with extension soap_gto.create( soap_mat, - pos, - Z, - ase.geometry.cell.complete_cell(system.get_cell()), - np.asarray(system.get_pbc(), dtype=bool), + positions, + atomic_numbers, + cell, + pbc, centers, ) elif self._rbf == "polynomial": @@ -568,10 +570,10 @@ def create_single(self, system, centers=None): ) soap_poly.create( soap_mat, - pos, - Z, - ase.geometry.cell.complete_cell(system.get_cell()), - np.asarray(system.get_pbc(), dtype=bool), + positions, + atomic_numbers, + cell, + pbc, centers, ) diff --git a/dscribe/ext/acsf.cpp b/dscribe/ext/acsf.cpp index e216491b..50a9a375 100644 --- a/dscribe/ext/acsf.cpp +++ b/dscribe/ext/acsf.cpp @@ -13,138 +13,164 @@ using namespace std; -ACSF::ACSF(double rCut, vector > g2Params, vector g3Params, vector > g4Params, vector > g5Params, vector atomicNumbers) +ACSF::ACSF(double r_cut, vector > g2_params, vector g3_params, vector > g4_params, vector > g5_params, vector atomic_numbers, bool periodic) + : DescriptorLocal(periodic, "off", r_cut) { - setRCut(rCut); - setG2Params(g2Params); - setG3Params(g3Params); - setG4Params(g4Params); - setG5Params(g5Params); - setAtomicNumbers(atomicNumbers); + set_r_cut(r_cut); + set_g2_params(g2_params); + set_g3_params(g3_params); + set_g4_params(g4_params); + set_g5_params(g5_params); + set_atomic_numbers(atomic_numbers); } -void ACSF::setRCut(double rCut) +void ACSF::set_r_cut(double r_cut) { - this->rCut = rCut; + this->r_cut = r_cut; } -double ACSF::getRCut() +double ACSF::get_r_cut() { -return this->rCut; +return this->r_cut; } -void ACSF::setG2Params(vector > g2Params) +void ACSF::set_g2_params(vector > g2_params) { - this->g2Params = g2Params; - nG2 = g2Params.size(); + this->g2_params = g2_params; + n_g2 = g2_params.size(); } -vector > ACSF::getG2Params() +vector > ACSF::get_g2_params() { -return this->g2Params; + return this->g2_params; } -void ACSF::setG3Params(vector g3Params) +void ACSF::set_g3_params(vector g3_params) { - this->g3Params = g3Params; - nG3 = g3Params.size(); + this->g3_params = g3_params; + n_g3 = g3_params.size(); } -vector ACSF::getG3Params() +vector ACSF::get_g3_params() { -return this->g3Params; + return this->g3_params; } -void ACSF::setG4Params(vector > g4Params) +void ACSF::set_g4_params(vector > g4_params) { - this->g4Params = g4Params; - nG4 = g4Params.size(); + this->g4_params = g4_params; + n_g4 = g4_params.size(); } -vector > ACSF::getG4Params() +vector > ACSF::get_g4_params() { -return this->g4Params; + return this->g4_params; } -void ACSF::setG5Params(vector > g5Params) +void ACSF::set_g5_params(vector > g5_params) { - this->g5Params = g5Params; - nG5 = g5Params.size(); + this->g5_params = g5_params; + n_g5 = g5_params.size(); } -vector > ACSF::getG5Params() +vector > ACSF::get_g5_params() { -return this->g5Params; + return this->g5_params; } -void ACSF::setAtomicNumbers(vector atomicNumbers) +void ACSF::set_atomic_numbers(vector atomic_numbers) { - this->atomicNumbers = atomicNumbers; - nTypes = atomicNumbers.size(); - nTypePairs = nTypes*(nTypes+1)/2; - unordered_map atomicNumberToIndexMap; + this->atomic_numbers = atomic_numbers; + n_types = atomic_numbers.size(); + n_type_pairs = n_types * (n_types + 1) / 2; + unordered_map atomic_number_to_index_map; int i = 0; - for (int Z : atomicNumbers) { - atomicNumberToIndexMap[Z] = i; + for (int Z : atomic_numbers) { + atomic_number_to_index_map[Z] = i; ++i; } - this->atomicNumberToIndexMap = atomicNumberToIndexMap; + this->atomic_number_to_index_map = atomic_number_to_index_map; } -vector ACSF::getAtomicNumbers() +vector ACSF::get_atomic_numbers() { -return this->atomicNumbers; + return this->atomic_numbers; } - -vector > ACSF::create(vector > &positions, vector &atomicNumbers, const vector > &distances, const vector > &neighbours, vector &indices) +inline int ACSF::get_number_of_features() const { + return (1 + this->n_g2 + this->n_g3) * this->n_types + (this->n_g4 + this->n_g5) * this->n_type_pairs; +} - // Allocate memory - int nIndices = indices.size(); - vector > output(nIndices, vector((1+nG2+nG3)*nTypes+(nG4+nG5)*nTypePairs, 0)); - - // Calculate the symmetry function values for every specified atom - int index = 0; - for (int &i : indices) { +void ACSF::create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t centers, + CellList cell_list +) +{ +} - // Compute pairwise terms only for neighbors within cutoff - const vector &i_neighbours = neighbours[i]; - vector &row = output[index]; - for (const int &j : i_neighbours) { - if (i == j) { - continue; - } +void ACSF::create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t centers, + CellList cell_list +) +{ + auto out_mu = out.mutable_unchecked<2>(); + auto centers_u = centers.unchecked<1>(); + auto positions_u = positions.unchecked<2>(); + auto atomic_numbers_u = atomic_numbers.unchecked<1>(); + + // Loop through centers + const int n_centers = centers.shape(0); + for (int index_i = 0; index_i < n_centers; ++index_i) { + int i = centers_u[index_i]; + + // Loop through neighbours + CellListResult neighbours_i = cell_list.getNeighboursForIndex(i); + int n_neighbours = neighbours_i.indices.size(); + for (int j_neighbour = 0; j_neighbour < n_neighbours; ++j_neighbour) { + int j = neighbours_i.indices[j_neighbour]; // Precompute some values - double r_ij = distances[i][j]; - double fc_ij = computeCutoff(r_ij); - int index_j = atomicNumberToIndexMap[atomicNumbers[j]]; - int offset = index_j * (1+nG2+nG3); // Skip G1, G2, G3 types that are not the ones of atom bi + double r_ij = neighbours_i.distances[j_neighbour]; + double fc_ij = compute_cutoff(r_ij); + int index_j = atomic_number_to_index_map[atomic_numbers_u[j]]; + int offset = index_j * (1+n_g2+n_g3); // Skip G1, G2, G3 types that are not the ones of atom bi // Compute G1 - computeG1(row, offset, fc_ij); + compute_g1(out_mu, index_i, offset, fc_ij); // Compute G2 - computeG2(row, offset, r_ij, fc_ij); + compute_g2(out_mu, index_i, offset, r_ij, fc_ij); // Compute G3 - computeG3(row, offset, r_ij, fc_ij); + compute_g3(out_mu, index_i, offset, r_ij, fc_ij); - // Compute angle terms only when both neighbors are within cutoff - if (g4Params.size() != 0 || g5Params.size() != 0) { - for (const int &k : i_neighbours) { - if (k == i || k >= j) { + // If g4 or g5 requested, loop through second neighbours + if (g4_params.size() != 0 || g5_params.size() != 0) { + for (int k_neighbour = 0; k_neighbour < n_neighbours; ++k_neighbour) { + int k = neighbours_i.indices[k_neighbour]; + if (k >= j) { continue; } + // Calculate j-k distance: it is not contained in the cell lists. + double dx = positions_u(j, 0) - positions_u(k, 0); + double dy = positions_u(j, 1) - positions_u(k, 1); + double dz = positions_u(j, 2) - positions_u(k, 2); + double r_jk_square = dx*dx + dy*dy + dz*dz; + double r_jk = sqrt(r_jk_square); + // Precompute some values that are used by both G4 and G5 - double r_ik = distances[i][k]; - double r_jk = distances[j][k]; - double fc_ik = computeCutoff(r_ik); - double r_ij_square = r_ij*r_ij; - double r_ik_square = r_ik*r_ik; - double r_jk_square = r_jk*r_jk; - int index_k = atomicNumberToIndexMap[atomicNumbers[k]]; + double r_ik = neighbours_i.distances[k_neighbour]; + double fc_ik = compute_cutoff(r_ik); + double r_ij_square = neighbours_i.distancesSquared[j_neighbour]; + double r_ik_square = neighbours_i.distancesSquared[k_neighbour]; + int index_k = atomic_number_to_index_map[atomic_numbers_u[k]]; double costheta = 0.5/(r_ij*r_ik) * (r_ij_square+r_ik_square-r_jk_square); // Determine the location for this triplet of species @@ -154,90 +180,82 @@ vector > ACSF::create(vector > &positions, vector< } else { its = (index_k*(index_k+1))/2 + index_j; } - offset = nTypes * (1+nG2+nG3); // Skip this atoms G1 G2 and G3 - offset += its * (nG4+nG5); // skip G4 and G5 types that are not the ones of atom bi + offset = n_types * (1+n_g2+n_g3); // Skip this atoms G1 G2 and G3 + offset += its * (n_g4+n_g5); // Skip G4 and G5 types that are not the ones of atom bi // Compute G4 - computeG4(row, offset, costheta, r_jk, r_ij_square, r_ik_square, r_jk_square, fc_ij, fc_ik); + compute_g4(out_mu, index_i, offset, costheta, r_jk, r_ij_square, r_ik_square, r_jk_square, fc_ij, fc_ik); // Compute G5 - computeG5(row, offset, costheta, r_ij_square, r_ik_square, fc_ij, fc_ik); + compute_g5(out_mu, index_i, offset, costheta, r_ij_square, r_ik_square, fc_ij, fc_ik); } } } - ++index; } - return output; } - /*! \brief Computes the value of the cutoff fuction at a specific distance. * */ -inline double ACSF::computeCutoff(double r_ij) { - return 0.5*(cos(r_ij*PI/rCut)+1); +inline double ACSF::compute_cutoff(double r_ij) { + return 0.5 * (cos(r_ij * PI / r_cut) + 1); } -inline void ACSF::computeG1(vector &output, int &offset, double &fc_ij) { - output[offset] += fc_ij; +inline void ACSF::compute_g1(py::detail::unchecked_mutable_reference &out_mu, int &index, int &offset, double &fc_ij) { + out_mu(index, offset) += fc_ij; offset += 1; } -inline void ACSF::computeG2(vector &output, int &offset, double &r_ij, double &fc_ij) { - - // Compute G2 - gaussian types +inline void ACSF::compute_g2(py::detail::unchecked_mutable_reference &out_mu, int &index, int &offset, double &r_ij, double &fc_ij) { double eta; double Rs; - for (auto params : g2Params) { + for (auto params : g2_params) { eta = params[0]; Rs = params[1]; - output[offset] += exp(-eta * (r_ij - Rs)*(r_ij - Rs)) * fc_ij; + out_mu(index, offset) += exp(-eta * (r_ij - Rs)*(r_ij - Rs)) * fc_ij; offset++; } } -inline void ACSF::computeG3(vector &output, int &offset, double &r_ij, double &fc_ij) { - // Compute G3 - cosine type - for (auto param : g3Params) { - output[offset] += cos(r_ij*param)*fc_ij; +inline void ACSF::compute_g3(py::detail::unchecked_mutable_reference &out_mu, int &index, int &offset, double &r_ij, double &fc_ij) { + for (auto param : g3_params) { + out_mu(index, offset) += cos(r_ij*param)*fc_ij; offset++; } } -inline void ACSF::computeG4(vector &output, int &offset, double &costheta, double &r_jk, double &r_ij_square, double &r_ik_square, double &r_jk_square, double &fc_ij, double &fc_ik) { - // Compute G4 - if (r_jk > rCut) { - offset += g4Params.size(); +inline void ACSF::compute_g4(py::detail::unchecked_mutable_reference &out_mu, int &index, int &offset, double &costheta, double &r_jk, double &r_ij_square, double &r_ik_square, double &r_jk_square, double &fc_ij, double &fc_ik) { + if (r_jk > r_cut) { + offset += g4_params.size(); return; } - double cutoff_jk = computeCutoff(r_jk); + double cutoff_jk = compute_cutoff(r_jk); double fc4 = fc_ij*fc_ik*cutoff_jk; double eta; double zeta; double lambda; double gauss; - for (auto params : g4Params) { + for (auto params : g4_params) { eta = params[0]; zeta = params[1]; lambda = params[2]; gauss = exp(-eta*(r_ij_square+r_ik_square+r_jk_square)) * fc4; - output[offset] += 2*pow(0.5*(1 + lambda*costheta), zeta) * gauss; + out_mu(index, offset) += 2*pow(0.5*(1 + lambda*costheta), zeta) * gauss; offset++; } } -inline void ACSF::computeG5(vector &output, int &offset, double &costheta, double &r_ij_square, double &r_ik_square, double &fc_ij, double &fc_ik) { - // Compute G5 +inline void ACSF::compute_g5(py::detail::unchecked_mutable_reference &out_mu, int &index, int &offset, double &costheta, double &r_ij_square, double &r_ik_square, double &fc_ij, double &fc_ik) { double eta; double zeta; double lambda; double gauss; double fc5 = fc_ij*fc_ik; - for (auto params : g5Params) { + for (auto params : g5_params) { eta = params[0]; zeta = params[1]; lambda = params[2]; gauss = exp(-eta*(r_ij_square+r_ik_square)) * fc5; - output[offset] += 2*pow(0.5*(1 + lambda*costheta), zeta) * gauss; + out_mu(index, offset) += 2*pow(0.5*(1 + lambda*costheta), zeta) * gauss; offset++; } } diff --git a/dscribe/ext/acsf.h b/dscribe/ext/acsf.h index 53e7474e..fd6e0e3b 100644 --- a/dscribe/ext/acsf.h +++ b/dscribe/ext/acsf.h @@ -3,6 +3,7 @@ #include #include +#include "descriptorlocal.h" #define PI 3.1415926535897932384626433832795028841971693993751058209749445923078164062 @@ -12,54 +13,70 @@ using namespace std; /** * Implementation for the performance-critical parts of ACSF. */ -class ACSF { - +class ACSF : public DescriptorLocal { public: - ACSF() {}; ACSF( - double rCut, - vector > g2Params, - vector g3Params, - vector > g4Params, - vector > g5Params, - vector atomicNumbers + double r_cut, + vector > g2_params, + vector g3_params, + vector > g4_params, + vector > g5_params, + vector atomic_numbers, + bool periodic + ); + + void create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t centers, + CellList cell_list ); - vector > create(vector > &positions, vector &atomicNumbers, const vector > &distances, const vector > &neighbours, vector &indices); - void setRCut(double rCut); - void setG2Params(vector > g2Params); - void setG3Params(vector g3Params); - void setG4Params(vector > g4Params); - void setG5Params(vector > g5Params); - void setAtomicNumbers(vector atomicNumbers); + void create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t centers, + CellList cell_list + ); + + int get_number_of_features() const; + + void set_r_cut(double r_cut); + void set_g2_params(vector > g2_params); + void set_g3_params(vector g3_params); + void set_g4_params(vector > g4_params); + void set_g5_params(vector > g5_params); + void set_atomic_numbers(vector atomic_numbers); - double getRCut(); - vector > getG2Params(); - vector getG3Params(); - vector > getG4Params(); - vector > getG5Params(); - vector getAtomicNumbers(); - int nTypes; - int nTypePairs; - int nG2; - int nG3; - int nG4; - int nG5; - double rCut; - vector > g2Params; - vector g3Params; - vector > g4Params; - vector > g5Params; - vector atomicNumbers; + double get_r_cut(); + vector > get_g2_params(); + vector get_g3_params(); + vector > get_g4_params(); + vector > get_g5_params(); + vector get_atomic_numbers(); + int n_types; + int n_type_pairs; + int n_g2; + int n_g3; + int n_g4; + int n_g5; + double r_cut; + vector > g2_params; + vector g3_params; + vector > g4_params; + vector > g5_params; + vector atomic_numbers; private: - double computeCutoff(double r_ij); - void computeG1(vector &output, int &offset, double &fc_ij); - void computeG2(vector &output, int &offset, double &r_ij, double &fc_ij); - void computeG3(vector &output, int &offset, double &r_ij, double &fc_ij); - void computeG4(vector &output, int &offset, double &costheta, double &r_jk, double &r_ij_square, double &r_ik_square, double &r_jk_square, double &fc_ij, double &fc_ik); - void computeG5(vector &output, int &offset, double &costheta, double &r_ij_square, double &r_ik_square, double &fc_ij, double &fc_ik); - unordered_map atomicNumberToIndexMap; + double compute_cutoff(double r_ij); + void compute_g1(py::detail::unchecked_mutable_reference &out_mu, int &index, int &offset, double &fc_ij); + void compute_g2(py::detail::unchecked_mutable_reference &out_mu, int &index, int &offset, double &r_ij, double &fc_ij); + void compute_g3(py::detail::unchecked_mutable_reference &out_mu, int &index, int &offset, double &r_ij, double &fc_ij); + void compute_g4(py::detail::unchecked_mutable_reference &out_mu, int &index, int &offset, double &costheta, double &r_jk, double &r_ij_square, double &r_ik_square, double &r_jk_square, double &fc_ij, double &fc_ik); + void compute_g5(py::detail::unchecked_mutable_reference &out_mu, int &index, int &offset, double &costheta, double &r_ij_square, double &r_ik_square, double &fc_ij, double &fc_ik); + unordered_map atomic_number_to_index_map; }; #endif diff --git a/dscribe/ext/descriptor.h b/dscribe/ext/descriptor.h index 019f55d4..73f32ffd 100644 --- a/dscribe/ext/descriptor.h +++ b/dscribe/ext/descriptor.h @@ -33,7 +33,6 @@ class Descriptor { */ virtual int get_number_of_features() const = 0; - protected: Descriptor(bool periodic, string average="", double cutoff=0); const bool periodic; const string average; diff --git a/dscribe/ext/descriptorlocal.cpp b/dscribe/ext/descriptorlocal.cpp index f289ceaa..4e9afb35 100644 --- a/dscribe/ext/descriptorlocal.cpp +++ b/dscribe/ext/descriptorlocal.cpp @@ -47,6 +47,26 @@ void DescriptorLocal::create( this->create(out, positions, atomic_numbers, centers); } +void DescriptorLocal::create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t cell, + py::array_t pbc, + py::array_t centers +) +{ + // Extend system if periodicity is requested. + auto pbc_u = pbc.unchecked<1>(); + bool is_periodic = this->periodic && (pbc_u(0) || pbc_u(1) || pbc_u(2)); + if (is_periodic) { + ExtendedSystem system_extended = extend_system(positions, atomic_numbers, cell, pbc, this->cutoff); + positions = system_extended.positions; + atomic_numbers = system_extended.atomic_numbers; + } + this->create(out, positions, atomic_numbers, centers); +} + void DescriptorLocal::create( py::array_t out, py::array_t positions, @@ -59,6 +79,18 @@ void DescriptorLocal::create( this->create(out, positions, atomic_numbers, centers, cell_list); } +void DescriptorLocal::create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t centers +) +{ + // Calculate neighbours with a cell list + CellList cell_list(positions, this->cutoff); + this->create(out, positions, atomic_numbers, centers, cell_list); +} + /** * The general idea: each atom for which a derivative is requested is * "wiggled" with central finite difference. The following tricks are used diff --git a/dscribe/ext/descriptorlocal.h b/dscribe/ext/descriptorlocal.h index 71d630e5..f1e604ce 100644 --- a/dscribe/ext/descriptorlocal.h +++ b/dscribe/ext/descriptorlocal.h @@ -29,16 +29,10 @@ using namespace std; */ class DescriptorLocal : public Descriptor { public: + DescriptorLocal(bool periodic, string average="", double cutoff=0); /** - * @brief Version of 'create' that automatically extends the system - * based on PBC and calculates celllist. - * - * @param out - * @param positions - * @param atomic_numbers - * @param cell - * @param pbc - * @param centers + * Versions of 'create' that automatically extends the system based on + * PBC and calculate celllist. */ void create( py::array_t out, @@ -48,14 +42,18 @@ class DescriptorLocal : public Descriptor { py::array_t pbc, py::array_t centers ); + void create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t cell, + py::array_t pbc, + py::array_t centers + ); /** - * @brief Version of 'create' that automatically calculates celllist. - * - * @param out - * @param positions - * @param atomic_numbers - * @param centers + * Versions of 'create' that automatically calculate + * celllist. */ void create( py::array_t out, @@ -63,15 +61,15 @@ class DescriptorLocal : public Descriptor { py::array_t atomic_numbers, py::array_t centers ); + void create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t centers + ); /** - * @brief Pure virtual function for calculating the feature vectors. - * - * @param out - * @param positions - * @param atomic_numbers - * @param centers - * @param cell_list + * Pure virtual function for calculating the feature vectors. */ virtual void create( py::array_t out, @@ -80,6 +78,13 @@ class DescriptorLocal : public Descriptor { py::array_t centers, CellList cell_list ) = 0; + virtual void create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t centers, + CellList cell_list + ) = 0; /** * Calculates the numerical derivates with central finite difference. @@ -111,8 +116,6 @@ class DescriptorLocal : public Descriptor { bool return_descriptor ); - protected: - DescriptorLocal(bool periodic, string average="", double cutoff=0); }; #endif diff --git a/dscribe/ext/ext.cpp b/dscribe/ext/ext.cpp index 4e318489..95ceb474 100644 --- a/dscribe/ext/ext.cpp +++ b/dscribe/ext/ext.cpp @@ -73,29 +73,28 @@ PYBIND11_MODULE(ext, m) { // ACSF py::class_(m, "ACSFWrapper") - .def(py::init > , vector , vector > , vector > , vector >()) - .def(py::init<>()) - .def("create", &ACSF::create) - .def("set_g2_params", &ACSF::setG2Params) - .def("get_g2_params", &ACSF::getG2Params) - .def_readwrite("n_types", &ACSF::nTypes) - .def_readwrite("n_type_pairs", &ACSF::nTypePairs) - .def_readwrite("n_g2", &ACSF::nG2) - .def_readwrite("n_g3", &ACSF::nG3) - .def_readwrite("n_g4", &ACSF::nG4) - .def_readwrite("n_g5", &ACSF::nG5) - .def_property("r_cut", &ACSF::getRCut, &ACSF::setRCut) - .def_property("g3_params", &ACSF::getG3Params, &ACSF::setG3Params) - .def_property("g4_params", &ACSF::getG4Params, &ACSF::setG4Params) - .def_property("g5_params", &ACSF::getG5Params, &ACSF::setG5Params) - .def_property("atomic_numbers", &ACSF::getAtomicNumbers, &ACSF::setAtomicNumbers) + .def(py::init > , vector , vector > , vector >, vector , bool>()) + .def("create", overload_cast_, py::array_t, py::array_t, py::array_t, py::array_t, py::array_t >()(&DescriptorLocal::create)) + .def("get_number_of_features", &ACSF::get_number_of_features) + .def_readwrite("n_types", &ACSF::n_types) + .def_readwrite("n_type_pairs", &ACSF::n_type_pairs) + .def_readwrite("n_g2", &ACSF::n_g2) + .def_readwrite("n_g3", &ACSF::n_g3) + .def_readwrite("n_g4", &ACSF::n_g4) + .def_readwrite("n_g5", &ACSF::n_g5) + .def_property("r_cut", &ACSF::get_r_cut, &ACSF::set_r_cut) + .def_property("g2_params", &ACSF::get_g2_params, &ACSF::set_g2_params) + .def_property("g3_params", &ACSF::get_g3_params, &ACSF::set_g3_params) + .def_property("g4_params", &ACSF::get_g4_params, &ACSF::set_g4_params) + .def_property("g5_params", &ACSF::get_g5_params, &ACSF::set_g5_params) + .def_property("atomic_numbers", &ACSF::get_atomic_numbers, &ACSF::set_atomic_numbers) .def(py::pickle( [](const ACSF &p) { - return py::make_tuple(p.rCut, p.g2Params, p.g3Params, p.g4Params, p.g5Params, p.atomicNumbers); + return py::make_tuple(p.r_cut, p.g2_params, p.g3_params, p.g4_params, p.g5_params, p.atomic_numbers, p.periodic); }, [](py::tuple t) { - if (t.size() != 6) + if (t.size() != 7) throw std::runtime_error("Invalid state!"); ACSF p( t[0].cast(), @@ -103,7 +102,8 @@ PYBIND11_MODULE(ext, m) { t[2].cast>(), t[3].cast >>(), t[4].cast >>(), - t[5].cast>() + t[5].cast>(), + t[6].cast() ); return p; } diff --git a/dscribe/ext/soap.cpp b/dscribe/ext/soap.cpp index 6b7fa1c4..696235b7 100644 --- a/dscribe/ext/soap.cpp +++ b/dscribe/ext/soap.cpp @@ -49,6 +49,16 @@ SOAPGTO::SOAPGTO( { } +void SOAPGTO::create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t centers, + CellList cell_list +) +{ +} + void SOAPGTO::create( py::array_t out, py::array_t positions, @@ -198,6 +208,15 @@ SOAPPolynomial::SOAPPolynomial( { } +void SOAPPolynomial::create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t centers, + CellList cell_list +) +{ +} void SOAPPolynomial::create( py::array_t out, py::array_t positions, diff --git a/dscribe/ext/soap.h b/dscribe/ext/soap.h index d584f760..37026c57 100644 --- a/dscribe/ext/soap.h +++ b/dscribe/ext/soap.h @@ -52,6 +52,13 @@ class SOAPGTO: public DescriptorLocal { py::array_t centers, CellList cell_list ); + void create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t centers, + CellList cell_list + ); int get_number_of_features() const; @@ -114,6 +121,13 @@ class SOAPPolynomial: public DescriptorLocal { py::array_t centers, CellList cell_list ); + void create( + py::array_t out, + py::array_t positions, + py::array_t atomic_numbers, + py::array_t centers, + CellList cell_list + ); int get_number_of_features() const; diff --git a/dscribe/kernels/__init__.py b/dscribe/kernels/__init__.py index 1e95da93..a6b43b88 100644 --- a/dscribe/kernels/__init__.py +++ b/dscribe/kernels/__init__.py @@ -13,5 +13,6 @@ See the License for the specific language governing permissions and limitations under the License. """ + from dscribe.kernels.averagekernel import AverageKernel from dscribe.kernels.rematchkernel import REMatchKernel diff --git a/dscribe/kernels/averagekernel.py b/dscribe/kernels/averagekernel.py index 1850496f..3bb3ffb8 100644 --- a/dscribe/kernels/averagekernel.py +++ b/dscribe/kernels/averagekernel.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np from dscribe.kernels.localsimilaritykernel import LocalSimilarityKernel diff --git a/dscribe/kernels/localsimilaritykernel.py b/dscribe/kernels/localsimilaritykernel.py index a5ac1754..d7c93b9a 100644 --- a/dscribe/kernels/localsimilaritykernel.py +++ b/dscribe/kernels/localsimilaritykernel.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + from abc import ABC, abstractmethod import numpy as np diff --git a/dscribe/kernels/rematchkernel.py b/dscribe/kernels/rematchkernel.py index 23d1352f..4432e2ea 100644 --- a/dscribe/kernels/rematchkernel.py +++ b/dscribe/kernels/rematchkernel.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np from dscribe.kernels.localsimilaritykernel import LocalSimilarityKernel diff --git a/dscribe/utils/dimensionality.py b/dscribe/utils/dimensionality.py index 93d6d421..e4e1d83d 100644 --- a/dscribe/utils/dimensionality.py +++ b/dscribe/utils/dimensionality.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np diff --git a/dscribe/utils/geometry.py b/dscribe/utils/geometry.py index 7b37eca0..86baaee4 100644 --- a/dscribe/utils/geometry.py +++ b/dscribe/utils/geometry.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np import scipy.sparse diff --git a/dscribe/utils/species.py b/dscribe/utils/species.py index f67c543d..3dc2a869 100644 --- a/dscribe/utils/species.py +++ b/dscribe/utils/species.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + import numpy as np import ase.data diff --git a/dscribe/utils/stats.py b/dscribe/utils/stats.py index 28b4cfb8..9f056946 100644 --- a/dscribe/utils/stats.py +++ b/dscribe/utils/stats.py @@ -13,6 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. """ + from ase import Atoms from dscribe.core.system import System import numpy as np diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..f080beaa --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,105 @@ +[build-system] +requires = [ + "setuptools>=42", + "wheel", + "pybind11>=2.4" +] +build-backend = "setuptools.build_meta" + +[project] +name = 'dscribe' +version = '2.1.1' +description = 'A Python package for creating feature transformations in applications of machine learning to materials science.' +readme = "README.md" +license = { file = "LICENSE" } +requires-python = ">=3.8" +dependencies = [ + "numpy", + "scipy", + "ase>=3.19.0", + "scikit-learn", + "joblib>=1.0.0", + "sparse", +] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Science/Research", + "Intended Audience :: Developers", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Physics", + "License :: OSI Approved :: Apache Software License", + "Operating System :: MacOS", + "Operating System :: Unix", + "Programming Language :: C", + "Programming Language :: C++", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3 :: Only", +] +keywords = ['descriptor', 'machine learning', 'atomistic structure', 'materials science'] + +[project.urls] +Documentation = 'https://singroup.github.io/dscribe/latest/' +Source = "https://singroup.github.io/dscribe" + +[project.optional-dependencies] +dev = [ + "coverage", + "ruff", + "coveralls", + "pymatgen>=2023.3.23", + "sphinx", + "sphinx_rtd_theme", + "sphinxcontrib-bibtex", + "pytest", +] + +[tool.setuptools.packages.find] +include = ["dscribe*"] +exclude = ["tests*"] + +[tool.ruff] +include = ["dscribe/*.py", "tests/*.py"] + +# Same as Black +line-length = 88 +indent-width = 4 + +[tool.ruff.lint] +select = [ + "E", # pycodestyle + "W", # pycodestyle + "PL", # pylint +] +ignore = [ + "E501", # Line too long ({width} > {limit} characters) + "E701", # Multiple statements on one line (colon) + "E731", # Do not assign a lambda expression, use a def + "E402", # Module level import not at top of file + "E741", # Ambiguous variable name + "W605", # Invalid escape sequence + "PLR0911", # Too many return statements + "PLR0912", # Too many branches + "PLR0913", # Too many arguments in function definition + "PLR0915", # Too many statements + "PLR2004", # Magic value used instead of constant + "PLW0603", # Using the global statement + "PLW2901", # redefined-loop-name + "PLR1714", # consider-using-in + "PLR5501", # else-if-used +] +fixable = ["ALL"] + +[tool.ruff.format] +# indent with spaces, rather than tabs. +indent-style = "space" + +# Like Black, respect magic trailing commas. +skip-magic-trailing-comma = false + +# Like Black, automatically detect the appropriate line ending. +line-ending = "auto" diff --git a/scripts/dependencies.sh b/scripts/dependencies.sh deleted file mode 100755 index 3197274b..00000000 --- a/scripts/dependencies.sh +++ /dev/null @@ -1,5 +0,0 @@ -# Update pip and setuptools and install development dependencies -cd .. -pip install pip --upgrade -pip install setuptools --upgrade -pip install -r devrequirements.txt diff --git a/scripts/format.sh b/scripts/format.sh new file mode 100755 index 00000000..79217103 --- /dev/null +++ b/scripts/format.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +cd .. +ruff format --check + + diff --git a/scripts/install.sh b/scripts/install.sh index 8c73c785..47fea419 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -1,3 +1,7 @@ +# Update pip and setuptools +pip install pip --upgrade +pip install setuptools --upgrade + # Make a source distribution cd .. python setup.py sdist @@ -8,4 +12,4 @@ version=`python setup.py --version` cd dist tar xvzf dscribe-$version.tar.gz cd dscribe-$version -pip install . +pip install .[dev] diff --git a/scripts/lint.sh b/scripts/lint.sh index 2447853d..40a208ee 100755 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash cd .. -black --check dscribe tests +ruff check + diff --git a/setup.py b/setup.py index bfcb080e..d7f40e6f 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ import platform from distutils.ccompiler import new_compiler from distutils.sysconfig import customize_compiler -from setuptools import setup, find_packages, Extension +from setuptools import setup, Extension from subprocess import getoutput @@ -83,37 +83,4 @@ def __str__(self): ] if __name__ == "__main__": - setup( - name="dscribe", - version="2.1.0", - url="https://singroup.github.io/dscribe/", - description="A Python package for creating feature transformations in applications of machine learning to materials science.", - long_description="A Python package for creating feature transformations in applications of machine learning to materials science.", - packages=find_packages(), - setup_requires=['pybind11>=2.4'], - install_requires=['pybind11>=2.4', "numpy", "scipy", "ase>=3.19.0", "scikit-learn", "joblib>=1.0.0", "sparse"], - include_package_data=True, # This ensures that files defined in MANIFEST.in are included - ext_modules=extensions, - license="Apache License 2.0", - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Science/Research", - "Intended Audience :: Developers", - "Topic :: Scientific/Engineering", - "Topic :: Scientific/Engineering :: Physics", - "License :: OSI Approved :: Apache Software License", - "Operating System :: MacOS", - "Operating System :: Unix", - "Programming Language :: C", - "Programming Language :: C++", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3 :: Only", - ], - keywords="descriptor machine learning atomistic structure materials science", - python_requires=">=3.7", - ) + setup(ext_modules=extensions) diff --git a/tests/test_acsf.py b/tests/test_acsf.py index 5647a2e1..6c4cd3f6 100644 --- a/tests/test_acsf.py +++ b/tests/test_acsf.py @@ -252,6 +252,42 @@ def test_features(): assert acsfg5[1, 2] == pytest.approx(g5_o_hh) +def test_jk_distance_bigger_than_cutoff(): + """Tests that calculating G4 and G5 works correctly when the j-k distance is + larger than cutoff.""" + distance = 2 + angle = np.pi / 2 + system = Atoms( + symbols=["H", "H", "H"], + positions=[[0, 0, 0], [distance, 0, 0], [0, distance, 0]], + pbc=False, + ) + r_cut = 2.8 + zeta = 1 + eta = 1 + lmbd = 1 + desc = ACSF( + r_cut=r_cut, + species=["H"], + g4_params=[[eta, zeta, lmbd]], + g5_params=[[eta, zeta, lmbd]], + ) + features = desc.create(system, [0]) + + g1 = 2 * cutoff(2, r_cut) + g4 = 0 # cutoff function for j-k pair is zero + g5 = ( + np.power(2, 1 - zeta) + * np.power((1 + lmbd * np.cos(angle)), zeta) + * (np.exp(-eta * (2 * distance**2))) + * cutoff(distance, r_cut) + * cutoff(distance, r_cut) + ) + assert features[0, 0] == pytest.approx(g1) + assert features[0, 1] == pytest.approx(g4) + assert features[0, 2] == pytest.approx(g5) + + def test_periodicity(): """Test that periodic copies are correctly repeated and included in the output. diff --git a/tests/test_ewaldsummatrix.py b/tests/test_ewaldsummatrix.py index 9967e085..e0b6b11f 100644 --- a/tests/test_ewaldsummatrix.py +++ b/tests/test_ewaldsummatrix.py @@ -209,7 +209,7 @@ def test_electrostatics(setup): # The value in each matrix element should correspond to the Coulomb # energy of a system with with only those atoms. Here the energies from - # the Ewald matrix are compared against the Ewald energy calculated + # the Ewald matrix are compared against the Ewald energy precalculated # with pymatgen. energy_pymatgen = load_ewald(create_args) assert np.allclose(energy_matrix, energy_pymatgen, atol=1e-5, rtol=0) diff --git a/tests/test_examples.py b/tests/test_examples.py index f9b8b944..075c6cb7 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -1,4 +1,5 @@ -import sys, os +import sys +import os from pathlib import Path from importlib import import_module diff --git a/tests/test_general.py b/tests/test_general.py index 7e400231..4168df35 100644 --- a/tests/test_general.py +++ b/tests/test_general.py @@ -415,6 +415,7 @@ def test_atoms_to_system(): class NaClFactory(SimpleCubicFactory): "A factory for creating NaCl (B1, Rocksalt) lattices." + bravais_basis = [ [0, 0, 0], [0, 0, 0.5], diff --git a/tests/test_mbtr.py b/tests/test_mbtr.py index 07c92001..fd31958c 100644 --- a/tests/test_mbtr.py +++ b/tests/test_mbtr.py @@ -722,10 +722,7 @@ def test_gaussian_distribution(normalize_gaussians): # Check against the analytical value prefactor = 1 / np.sqrt(2 * np.pi) if normalize_gaussians else 1 gaussian = ( - lambda x, mean: 1 - / std - * prefactor - * np.exp(-((x - mean) ** 2) / (2 * std**2)) + lambda x, mean: 1 / std * prefactor * np.exp(-((x - mean) ** 2) / (2 * std**2)) ) assert np.allclose(peak1_y, 2 * gaussian(1, 1), rtol=0, atol=0.001) assert np.allclose(peak2_y, gaussian(8, 8), rtol=0, atol=0.001) diff --git a/tests/test_soap.py b/tests/test_soap.py index c7c14954..07d1a13d 100644 --- a/tests/test_soap.py +++ b/tests/test_soap.py @@ -871,9 +871,7 @@ def test_rbf_orthonormality(): gto = np.zeros((nr)) rspace = np.linspace(0, r_cut + 5, nr) for k in range(n_max): - gto += ( - betas[l, n, k] * rspace**l * np.exp(-alphas[l, k] * rspace**2) - ) + gto += betas[l, n, k] * rspace**l * np.exp(-alphas[l, k] * rspace**2) n_basis += 1 functions[n, l, :] = gto diff --git a/tests/testutils.py b/tests/testutils.py index aff4ae34..72f7a0e5 100644 --- a/tests/testutils.py +++ b/tests/testutils.py @@ -5,8 +5,6 @@ from scipy.linalg import sqrtm from ase import Atoms -# from pymatgen.analysis.ewald import EwaldSummation -# from pymatgen.core.structure import Structure from dscribe.descriptors import SOAP from joblib import Parallel, delayed from conftest import get_simple_finite @@ -404,6 +402,9 @@ def save_poly_coefficients(): def calculate_ewald(system, a=None, r_cut=None, g_cut=None, accuracy=None): """Used to precalculate the Ewald summation results using pymatgen.""" + from pymatgen.analysis.ewald import EwaldSummation + from pymatgen.core.structure import Structure + positions = system.get_positions() atomic_num = system.get_atomic_numbers() n_atoms = len(system)