diff --git a/docs/2.0.x/_modules/dscribe/descriptors/descriptorlocal.html b/docs/2.0.x/_modules/dscribe/descriptors/descriptorlocal.html index fd5c9fea..2492c341 100644 --- a/docs/2.0.x/_modules/dscribe/descriptors/descriptorlocal.html +++ b/docs/2.0.x/_modules/dscribe/descriptors/descriptorlocal.html @@ -276,7 +276,10 @@

Source code for dscribe.descriptors.descriptorlocal

if centers is None: n_centers = len(job[0]) else: - n_centers = 1 if self.average != "off" else len(centers) + if self.average == "off": + n_centers = len(centers) + else: + n_centers = 1 n_indices = len(job[2]) return (n_centers, n_indices, 3, n_features), (n_centers, n_features) diff --git a/docs/2.0.x/_modules/dscribe/descriptors/soap.html b/docs/2.0.x/_modules/dscribe/descriptors/soap.html index 12fcdde2..471c0aee 100644 --- a/docs/2.0.x/_modules/dscribe/descriptors/soap.html +++ b/docs/2.0.x/_modules/dscribe/descriptors/soap.html @@ -106,6 +106,7 @@

Source code for dscribe.descriptors.soap

 import ase.geometry.cell
 import ase.data
 
+from dscribe.utils.species import get_atomic_numbers
 from dscribe.descriptors.descriptorlocal import DescriptorLocal
 import dscribe.ext
 
@@ -141,8 +142,8 @@ 

Source code for dscribe.descriptors.soap

         sigma=1.0,
         rbf="gto",
         weighting=None,
-        crossover=True,
         average="off",
+        compression={"mode": "off", "species_weighting": None},
         species=None,
         periodic=False,
         sparse=False,
@@ -216,19 +217,42 @@ 

Source code for dscribe.descriptors.soap

                   function is also specified, this constant will override it
                   for the central atoms.
 
-            crossover (bool): Determines if crossover of atomic types should
-                be included in the power spectrum. If enabled, the power
-                spectrum is calculated over all unique species combinations Z
-                and Z'. If disabled, the power spectrum does not contain
-                cross-species information and is only run over each unique
-                species Z. Turned on by default to correspond to the original
-                definition
             average (str): The averaging mode over the centers of interest.
                 Valid options are:
 
                     * ``"off"``: No averaging.
                     * ``"inner"``: Averaging over sites before summing up the magnetic quantum numbers: :math:`p_{nn'l}^{Z_1,Z_2} \sim \sum_m (\\frac{1}{n} \sum_i c_{nlm}^{i, Z_1})^{*} (\\frac{1}{n} \sum_i c_{n'lm}^{i, Z_2})`
                     * ``"outer"``: Averaging over the power spectrum of different sites: :math:`p_{nn'l}^{Z_1,Z_2} \sim \\frac{1}{n} \sum_i \sum_m (c_{nlm}^{i, Z_1})^{*} (c_{n'lm}^{i, Z_2})`
+            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:
+
+                    * ```"mode"```: Specifies the type of compression. This can be one of:
+                        * ``"off"``: No compression; default.
+                        * ``"mu2"``: The SOAP feature vector is generated in an element-agnostic way, so that
+                            the size of the feature vector is now independent of the number of elements (see Darby et al
+                            below for details). It is still possible when using this option to construct a feature
+                            vector that distinguishes between elements by supplying element-specific weighting under
+                            "species_weighting", see below.
+                        * ``"mu1nu1"``: Implements the mu=1, nu=1 feature compression scheme from Darby et al.: :math:`p_{inn'l}^{Z_1,Z_2} \sum_m (c_{nlm}^{i, Z_1})^{*} (\sum_z c_{n'lm}^{i, z})`.
+                            In other words, each coefficient for each species is multiplied by a "species-mu2" sum over the corresponding set of coefficients for all other species.
+                            If this option is selected, features are generated for each center, but the number of features (the size of each feature vector) scales linearly rather than
+                            quadratically with the number of elements in the system.
+                        * ``"crossover"``: The power spectrum does not contain cross-species information
+                            and is only run over each unique species Z. In this configuration, the size of
+                            the feature vector scales linearly with the number of elements in the system.
+                    * ```"species_weighting"```: Either None or a dictionary mapping each species to a
+                        species-specific weight. If None, there is no species-specific weighting. If a dictionary,
+                        must contain a matching key for each species in the ``species`` iterable.
+                        The main use of species weighting is to weight each element differently when using
+                        the "mu2" option for ``compression``.
+
+                    For reference see:
+                        "Darby, J.P., Kermode, J.R. & Csányi, G.
+                        Compressing local atomic neighbourhood descriptors.
+                        npj Comput Mater 8, 166 (2022). https://doi.org/10.1038/s41524-022-00847-y"
+
             species (iterable): The chemical species as a list of atomic
                 numbers or as a list of chemical symbols. Notice that this is not
                 the atomic numbers that are present for an individual system, but
@@ -258,6 +282,13 @@ 

Source code for dscribe.descriptors.soap

         # Setup the involved chemical species
         self.species = species
 
+        # If species weighting is supplied, ensure it is valid and set
+        # it up.
+        if "species_weighting" in compression:
+            self.species_weights = compression["species_weighting"]
+        else:
+            self.species_weights = None
+
         # Test that general settings are valid
         if sigma <= 0:
             raise ValueError(
@@ -283,6 +314,15 @@ 

Source code for dscribe.descriptors.soap

                 "one of the following: {}".format(average, supported_average)
             )
 
+        supported_compression = set(("off", "mu2", "mu1nu1", "crossover"))
+        if compression["mode"] not in supported_compression:
+            raise ValueError(
+                "Invalid compression mode '{}' given. Please use "
+                "one of the following: {}".format(
+                    compression["mode"], supported_compression
+                )
+            )
+
         if not (weighting or r_cut):
             raise ValueError("Either weighting or r_cut need to be defined")
         if weighting:
@@ -358,7 +398,7 @@ 

Source code for dscribe.descriptors.soap

         self._l_max = l_max
         self._rbf = rbf
         self.average = average
-        self.crossover = crossover
+ self.compression = compression["mode"]
[docs] def prepare_centers(self, system, centers=None): """Validates and prepares the centers for the C++ extension.""" @@ -503,7 +543,7 @@

Source code for dscribe.descriptors.soap

         # Determine if the outputs have a fixed size
         n_features = self.get_number_of_features()
         static_size = None
-        if self.average == "outer" or self.average == "inner":
+        if self.average != "off":
             static_size = [n_features]
         else:
             if centers is None:
@@ -581,13 +621,14 @@ 

Source code for dscribe.descriptors.soap

                 self._l_max,
                 self._eta,
                 self._weighting,
-                self.crossover,
                 self.average,
                 cutoff_padding,
                 alphas,
                 betas,
                 self._atomic_numbers,
+                self.species_weights,
                 self.periodic,
+                self.compression,
             )
 
             # Calculate analytically with extension
@@ -612,13 +653,14 @@ 

Source code for dscribe.descriptors.soap

                 self._l_max,
                 self._eta,
                 self._weighting,
-                self.crossover,
                 self.average,
                 cutoff_padding,
                 rx,
                 gss,
                 self._atomic_numbers,
+                self.species_weights,
                 self.periodic,
+                self.compression,
             )
             soap_poly.create(
                 soap_mat,
@@ -723,15 +765,15 @@ 

Source code for dscribe.descriptors.soap

                 self._l_max,
                 self._eta,
                 self._weighting,
-                self.crossover,
                 self.average,
                 cutoff_padding,
                 alphas,
                 betas,
                 self._atomic_numbers,
+                self.species_weights,
                 self.periodic,
+                self.compression,
             )
-
             # Calculate numerically with extension
             soap_gto.derivatives_numerical(
                 d,
@@ -757,13 +799,14 @@ 

Source code for dscribe.descriptors.soap

                 self._l_max,
                 self._eta,
                 self._weighting,
-                self.crossover,
                 self.average,
                 cutoff_padding,
                 rx,
                 gss,
                 self._atomic_numbers,
+                self.species_weights,
                 self.periodic,
+                self.compression,
             )
             soap_poly.derivatives_numerical(
                 d,
@@ -826,13 +869,14 @@ 

Source code for dscribe.descriptors.soap

             self._l_max,
             self._eta,
             self._weighting,
-            self.crossover,
             self.average,
             cutoff_padding,
             alphas,
             betas,
             self._atomic_numbers,
+            self.species_weights,
             self.periodic,
+            self.compression,
         )
 
         # These arrays are only used internally by the C++ code.
@@ -892,6 +936,60 @@ 

Source code for dscribe.descriptors.soap

             self.index_to_atomic_number[i_atom] = atomic_number
         self.n_elements = len(self._atomic_numbers)
 
+    @property
+    def species_weights(self):
+        return self._species_weights
+
+    @species_weights.setter
+    def species_weights(self, value):
+        """Used to check the validity of species weighting and set it up.
+        Note that species must already be set up in order to set species
+        weighting.
+
+        Args:
+            value(iterable): Chemical species either as a list of atomic
+                numbers or list of chemical symbols.
+        """
+        if value is None:
+            self._species_weights = np.ones((self.n_elements))
+        else:
+            if not isinstance(value, dict):
+                raise ValueError(
+                    "Invalid species weighting '{}' given. Species weighting must "
+                    "be either None or a dict.".format(value)
+                )
+
+            if len(value) != self.n_elements:
+                raise ValueError(
+                    "The species_weighting dictionary, "
+                    "if supplied, must contain the same keys as "
+                    "the list of accepted species."
+                )
+            species_weights = []
+            for specie in list(self.species):
+                if specie not in value:
+                    raise ValueError(
+                        "The species_weighting dictionary, "
+                        "if supplied, must contain the same keys as "
+                        "the list of accepted species."
+                    )
+                if isinstance(specie, (int, np.integer)):
+                    if specie <= 0:
+                        raise ValueError(
+                            "Species weighting {} contained a zero or negative "
+                            "atomic number.".format(value)
+                        )
+                    species_weights.append((value[specie], specie))
+                else:
+                    species_weights.append(
+                        (value[specie], ase.data.atomic_numbers.get(specie))
+                    )
+
+            species_weights = [
+                s[0] for s in sorted(species_weights, key=lambda x: x[1])
+            ]
+            self._species_weights = np.array(species_weights).astype(np.float64)
+
 
[docs] def get_number_of_features(self): """Used to inquire the final number of features that this descriptor will have. @@ -900,11 +998,15 @@

Source code for dscribe.descriptors.soap

             int: Number of features for this descriptor.
         """
         n_elem = len(self._atomic_numbers)
-        if self.crossover:
-            n_elem_radial = n_elem * self._n_max
-            return int((n_elem_radial) * (n_elem_radial + 1) / 2 * (self._l_max + 1))
-        else:
-            return int(n_elem * self._n_max * (self._n_max + 1) / 2 * (self._l_max + 1))
+ if self.compression == "mu2": + return int((self._n_max) * (self._n_max + 1) * (self._l_max + 1) / 2) + elif self.compression == "mu1nu1": + return int(self._n_max**2 * n_elem * (self._l_max + 1)) + + elif self.compression == "crossover": + return int(n_elem * self._n_max * (self._n_max + 1) / 2 * (self._l_max + 1)) + 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): """Can be used to query the location of a species combination in the @@ -952,9 +1054,8 @@

Source code for dscribe.descriptors.soap

             numbers = list(reversed(numbers))
         i = numbers[0]
         j = numbers[1]
-        n_elem_feat_symm = self._n_max * (self._n_max + 1) / 2 * (self._l_max + 1)
-
-        if self.crossover:
+        if self.compression == "off":
+            n_elem_feat_symm = self._n_max * (self._n_max + 1) / 2 * (self._l_max + 1)
             n_elem_feat_unsymm = self._n_max * self._n_max * (self._l_max + 1)
             n_elem_feat = n_elem_feat_symm if i == j else n_elem_feat_unsymm
 
@@ -965,10 +1066,20 @@ 

Source code for dscribe.descriptors.soap

 
             start = int(m_symm * n_elem_feat_symm + m_unsymm * n_elem_feat_unsymm)
             end = int(start + n_elem_feat)
-        else:
+        elif self.compression == "mu2":
+            n_elem_feat_symm = self._n_max * (self._n_max + 1) * (self._l_max + 1) / 2
+            start = 0
+            end = int(0 + n_elem_feat_symm)
+        elif self.compression in ["mu1nu1", "crossover"]:
+            n_elem_feat_symm = self._n_max**2 * (self._l_max + 1)
+            if self.compression == "crossover":
+                n_elem_feat_symm = (
+                    self._n_max * (self._n_max + 1) * (self._l_max + 1) / 2
+                )
             if i != j:
                 raise ValueError(
-                    "Crossover is set to False. No cross-species output " "available"
+                    "Compression has been selected. "
+                    "No cross-species output available"
                 )
             start = int(i * n_elem_feat_symm)
             end = int(start + n_elem_feat_symm)
@@ -1218,4 +1329,4 @@ 

Source code for dscribe.descriptors.soap

    
 
 
-
\ No newline at end of file
+
diff --git a/docs/2.0.x/doc/dscribe.descriptors.html b/docs/2.0.x/doc/dscribe.descriptors.html
index a8be4465..8b157611 100644
--- a/docs/2.0.x/doc/dscribe.descriptors.html
+++ b/docs/2.0.x/doc/dscribe.descriptors.html
@@ -2191,7 +2191,7 @@ 

Submodules
-class dscribe.descriptors.soap.SOAP(r_cut=None, n_max=None, l_max=None, sigma=1.0, rbf='gto', weighting=None, crossover=True, average='off', 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 @@ -2283,13 +2283,6 @@

Submodulesbool) – Determines if crossover of atomic types should -be included in the power spectrum. If enabled, the power -spectrum is calculated over all unique species combinations Z -and Z’. If disabled, the power spectrum does not contain -cross-species information and is only run over each unique -species Z. Turned on by default to correspond to the original -definition

  • average (str) –

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

    @@ -2300,6 +2293,57 @@

    Submodulesdict) –

    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:

    +
    +
      +
    • +
      `"mode"`: Specifies the type of compression. This can be one of:
        +
      • "off": No compression; default.

      • +
      • +
        "mu2": The SOAP feature vector is generated in an element-agnostic way, so that

        the size of the feature vector is now independent of the number of elements (see Darby et al +below for details). It is still possible when using this option to construct a feature +vector that distinguishes between elements by supplying element-specific weighting under +“species_weighting”, see below.

        +
        +
        +
      • +
      • +
        "mu1nu1": Implements the mu=1, nu=1 feature compression scheme from Darby et al.: \(p_{inn'l}^{Z_1,Z_2} \sum_m (c_{nlm}^{i, Z_1})^{*} (\sum_z c_{n'lm}^{i, z})\).

        In other words, each coefficient for each species is multiplied by a “species-mu2” sum over the corresponding set of coefficients for all other species. +If this option is selected, features are generated for each center, but the number of features (the size of each feature vector) scales linearly rather than +quadratically with the number of elements in the system.

        +
        +
        +
      • +
      • +
        "crossover": The power spectrum does not contain cross-species information

        and is only run over each unique species Z. In this configuration, the size of +the feature vector scales linearly with the number of elements in the system.

        +
        +
        +
      • +
      +
      +
      +
    • +
    • +
      `"species_weighting"`: Either None or a dictionary mapping each species to a

      species-specific weight. If None, there is no species-specific weighting. If a dictionary, +must contain a matching key for each species in the species iterable. +The main use of species weighting is to weight each element differently when using +the “mu2” option for compression.

      +
      +
      +
    • +
    +
    +
    For reference see:

    ”Darby, J.P., Kermode, J.R. & Csányi, G. +Compressing local atomic neighbourhood descriptors. +npj Comput Mater 8, 166 (2022). https://doi.org/10.1038/s41524-022-00847-y

    +
    +
    +
    +

  • species (iterable) – The chemical species as a list of atomic numbers or as a list of chemical symbols. Notice that this is not the atomic numbers that are present for an individual system, but @@ -2562,6 +2606,11 @@

    Submodulesproperty species
    +
    +
    +property species_weights
    +
    +
    validate_derivatives_method(method, attach)[source]
    diff --git a/docs/2.0.x/doc/dscribe.html b/docs/2.0.x/doc/dscribe.html index 73ce881f..844518ee 100644 --- a/docs/2.0.x/doc/dscribe.html +++ b/docs/2.0.x/doc/dscribe.html @@ -273,6 +273,7 @@

    SubpackagesSOAP.init_internal_dev_array()

  • SOAP.prepare_centers()
  • SOAP.species
  • +
  • SOAP.species_weights
  • SOAP.validate_derivatives_method()
  • @@ -534,7 +535,7 @@

    Submodules
    -class dscribe.ext.SOAPGTO(self: dscribe.ext.SOAPGTO, arg0: float, arg1: int, arg2: int, arg3: float, arg4: dict, arg5: bool, arg6: str, arg7: float, arg8: numpy.ndarray[numpy.float64], arg9: numpy.ndarray[numpy.float64], arg10: numpy.ndarray[numpy.int32], arg11: bool)
    +class dscribe.ext.SOAPGTO(self: dscribe.ext.SOAPGTO, arg0: float, arg1: int, arg2: int, arg3: float, arg4: dict, arg5: str, arg6: float, arg7: numpy.ndarray[numpy.float64], arg8: numpy.ndarray[numpy.float64], arg9: numpy.ndarray[numpy.int32], arg10: numpy.ndarray[numpy.float64], arg11: bool, arg12: str)

    Bases: pybind11_object

    @@ -561,7 +562,7 @@

    Submodules
    -class dscribe.ext.SOAPPolynomial(self: dscribe.ext.SOAPPolynomial, arg0: float, arg1: int, arg2: int, arg3: float, arg4: dict, arg5: bool, arg6: str, arg7: float, arg8: numpy.ndarray[numpy.float64], arg9: numpy.ndarray[numpy.float64], arg10: numpy.ndarray[numpy.int32], arg11: bool)
    +class dscribe.ext.SOAPPolynomial(self: dscribe.ext.SOAPPolynomial, arg0: float, arg1: int, arg2: int, arg3: float, arg4: dict, arg5: str, arg6: float, arg7: numpy.ndarray[numpy.float64], arg8: numpy.ndarray[numpy.float64], arg9: numpy.ndarray[numpy.int32], arg10: numpy.ndarray[numpy.float64], arg11: bool, arg12: str)

    Bases: pybind11_object

    diff --git a/docs/2.0.x/genindex.html b/docs/2.0.x/genindex.html index 735bae29..72af03ab 100644 --- a/docs/2.0.x/genindex.html +++ b/docs/2.0.x/genindex.html @@ -820,10 +820,10 @@

    S

  • SOAPPolynomial (class in dscribe.ext)
  • - - + +
  • species_weights (dscribe.descriptors.soap.SOAP property) +
  • symbols_to_numbers() (in module dscribe.utils.species)
  • System (class in dscribe.core.system) diff --git a/docs/2.0.x/objects.inv b/docs/2.0.x/objects.inv index befe12ff..f9b4ebcd 100644 Binary files a/docs/2.0.x/objects.inv and b/docs/2.0.x/objects.inv differ diff --git a/docs/2.0.x/searchindex.js b/docs/2.0.x/searchindex.js index 69ec7a3d..c231b69f 100644 --- a/docs/2.0.x/searchindex.js +++ b/docs/2.0.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, 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, 5, 6, 7, 8, 9, 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, 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, 16, 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], "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, 7, 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, 26, 27, 29], "now": [2, 25], "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], "new": [2, 3, 4, 7, 9, 11, 14, 15], "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], "remov": [2, 9, 20], "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, "option": [2, 6, 7, 8, 9, 14, 15, 18, 19, 20, 21, 22, 23], "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, 8, 20, 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, 28], "courtesi": 2, "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, 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], "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, 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], "org": [3, 5, 6, 7, 8, 9, 18], "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, 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, 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], "paramet": [6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26], "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, 16, 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, 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, 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, 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, "al": [7, 18, 19, 21], "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, 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, 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], "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], "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, 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, 23, 28], "sharp": [7, 19, 20], "area": [7, 19, 20], "drop": [7, 19, 20], "mu": [7, 19, 20], "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], "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], "crossov": [7, 22, 26], "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], "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, "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], "enabl": [7, 22], "uniqu": [7, 20, 22], "disabl": [7, 22], "cross": [7, 14, 22], "origin": [7, 9, 18, 20, 22], "definit": [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], "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], "coeffici": [8, 22], "boolean": [8, 9], "achiev": [8, 20, 22, 28, 29], "k_": 8, "jj": 8, "localkernel": 8, "nxm": 8, "scikit": [8, 26], "06": 8, "entropi": 8, "match": [8, 22, 26], "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, "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], "select": [12, 22, 24, 25], "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], "It": [14, 19, 20, 22, 23, 25], "everi": [15, 17], "similarli": [15, 23, 27], "howev": [15, 17, 18, 19, 20, 21, 22, 23, 29], "alwai": [15, 22, 23], "scheme": [15, 16, 19], "balanc": [15, 22, 25], "anywai": 15, "upon": 15, "split": [15, 17, 18, 21, 24], "decid": 15, "retain": 15, "still": [15, 17, 25, 27], "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], "slightli": 18, "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], "main": [19, 27], "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, "cost": 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, "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, "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], "reduc": 24, "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, 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"]], "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({"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, 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, 5, 6, 7, 8, 9, 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, 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, 16, 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], "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, 7, 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, 26, 27, 29], "now": [2, 25], "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], "new": [2, 3, 4, 7, 9, 11, 14, 15], "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], "remov": [2, 9, 20], "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, "option": [2, 6, 7, 8, 9, 14, 15, 18, 19, 20, 21, 22, 23], "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, 8, 20, 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, 28], "courtesi": 2, "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, 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], "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, 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], "org": [3, 5, 6, 7, 8, 9, 18], "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, 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, 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], "paramet": [6, 7, 8, 9, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26], "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, 16, 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, 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, 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, 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, "al": [7, 18, 19, 21], "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, 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, 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], "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], "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, 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, 23, 28], "sharp": [7, 19, 20], "area": [7, 19, 20], "drop": [7, 19, 20], "mu": [7, 19, 20], "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], "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], "crossov": [7, 22, 26], "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], "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, "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], "enabl": [7, 22], "uniqu": [7, 20, 22], "disabl": [7, 22], "cross": [7, 14, 22], "origin": [7, 9, 18, 20, 22], "definit": [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], "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], "coeffici": [8, 22], "boolean": [8, 9], "achiev": [8, 20, 22, 28, 29], "k_": 8, "jj": 8, "localkernel": 8, "nxm": 8, "scikit": [8, 26], "06": 8, "entropi": 8, "match": [8, 22, 26], "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, "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], "select": [12, 22, 24, 25], "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], "It": [14, 19, 20, 22, 23, 25], "everi": [15, 17], "similarli": [15, 23, 27], "howev": [15, 17, 18, 19, 20, 21, 22, 23, 29], "alwai": [15, 22, 23], "scheme": [15, 16, 19], "balanc": [15, 22, 25], "anywai": 15, "upon": 15, "split": [15, 17, 18, 21, 24], "decid": 15, "retain": 15, "still": [15, 17, 25, 27], "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], "slightli": 18, "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], "main": [19, 27], "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, "cost": 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, "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, "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], "reduc": 24, "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, 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"]], "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__"]]}}) diff --git a/docs/2.0.x/tutorials/descriptors/soap.html b/docs/2.0.x/tutorials/descriptors/soap.html index cacfab71..603e1851 100644 --- a/docs/2.0.x/tutorials/descriptors/soap.html +++ b/docs/2.0.x/tutorials/descriptors/soap.html @@ -196,7 +196,7 @@

    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, crossover=True, average='off', 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:

    -
  • crossover (bool) – Determines if crossover of atomic types should -be included in the power spectrum. If enabled, the power -spectrum is calculated over all unique species combinations Z -and Z’. If disabled, the power spectrum does not contain -cross-species information and is only run over each unique -species Z. Turned on by default to correspond to the original -definition

  • average (str) –

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

    @@ -288,6 +281,57 @@

    Setup

  • +
  • 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:

    +
    +
      +
    • +
      `"mode"`: Specifies the type of compression. This can be one of:
        +
      • "off": No compression; default.

      • +
      • +
        "mu2": The SOAP feature vector is generated in an element-agnostic way, so that

        the size of the feature vector is now independent of the number of elements (see Darby et al +below for details). It is still possible when using this option to construct a feature +vector that distinguishes between elements by supplying element-specific weighting under +“species_weighting”, see below.

        +
        +
        +
      • +
      • +
        "mu1nu1": Implements the mu=1, nu=1 feature compression scheme from Darby et al.: \(p_{inn'l}^{Z_1,Z_2} \sum_m (c_{nlm}^{i, Z_1})^{*} (\sum_z c_{n'lm}^{i, z})\).

        In other words, each coefficient for each species is multiplied by a “species-mu2” sum over the corresponding set of coefficients for all other species. +If this option is selected, features are generated for each center, but the number of features (the size of each feature vector) scales linearly rather than +quadratically with the number of elements in the system.

        +
        +
        +
      • +
      • +
        "crossover": The power spectrum does not contain cross-species information

        and is only run over each unique species Z. In this configuration, the size of +the feature vector scales linearly with the number of elements in the system.

        +
        +
        +
      • +
      +
      +
      +
    • +
    • +
      `"species_weighting"`: Either None or a dictionary mapping each species to a

      species-specific weight. If None, there is no species-specific weighting. If a dictionary, +must contain a matching key for each species in the species iterable. +The main use of species weighting is to weight each element differently when using +the “mu2” option for compression.

      +
      +
      +
    • +
    +
    +
    For reference see:

    ”Darby, J.P., Kermode, J.R. & Csányi, G. +Compressing local atomic neighbourhood descriptors. +npj Comput Mater 8, 166 (2022). https://doi.org/10.1038/s41524-022-00847-y

    +
    +
    +
    +

  • species (iterable) – The chemical species as a list of atomic numbers or as a list of chemical symbols. Notice that this is not the atomic numbers that are present for an individual system, but diff --git a/docs/2.0.x/tutorials/similarity_analysis/kernels.html b/docs/2.0.x/tutorials/similarity_analysis/kernels.html index 253582f2..83637842 100644 --- a/docs/2.0.x/tutorials/similarity_analysis/kernels.html +++ b/docs/2.0.x/tutorials/similarity_analysis/kernels.html @@ -137,7 +137,7 @@

    Average kernel# First we will have to create the features for atomic environments. Lets # use SOAP. -desc = SOAP(species=[1, 6, 7, 8], r_cut=5.0, n_max=2, l_max=2, sigma=0.2, periodic=False, crossover=True, sparse=False) +desc = SOAP(species=[1, 6, 7, 8], r_cut=5.0, n_max=2, l_max=2, sigma=0.2, periodic=False, compression={"mode":"off"}, sparse=False) a_features = desc.create(a) b_features = desc.create(b) @@ -179,7 +179,7 @@

    REMatch kernel# First we will have to create the features for atomic environments. Lets # use SOAP. -desc = SOAP(species=["H", "O"], r_cut=5.0, n_max=2, l_max=2, sigma=0.2, periodic=False, crossover=True, sparse=False) +desc = SOAP(species=["H", "O"], r_cut=5.0, n_max=2, l_max=2, sigma=0.2, periodic=False, compression={"mode":"off"}, sparse=False) a_features = desc.create(a) b_features = desc.create(b) diff --git a/dscribe/descriptors/descriptorlocal.py b/dscribe/descriptors/descriptorlocal.py index 17cb5c52..02983956 100644 --- a/dscribe/descriptors/descriptorlocal.py +++ b/dscribe/descriptors/descriptorlocal.py @@ -192,7 +192,10 @@ def get_shapes(job): if centers is None: n_centers = len(job[0]) else: - n_centers = 1 if self.average != "off" else len(centers) + if self.average == "off": + n_centers = len(centers) + else: + n_centers = 1 n_indices = len(job[2]) return (n_centers, n_indices, 3, n_features), (n_centers, n_features) diff --git a/dscribe/descriptors/soap.py b/dscribe/descriptors/soap.py index fe4d4039..3a860fbf 100644 --- a/dscribe/descriptors/soap.py +++ b/dscribe/descriptors/soap.py @@ -22,6 +22,7 @@ import ase.geometry.cell import ase.data +from dscribe.utils.species import get_atomic_numbers from dscribe.descriptors.descriptorlocal import DescriptorLocal import dscribe.ext @@ -57,8 +58,8 @@ def __init__( sigma=1.0, rbf="gto", weighting=None, - crossover=True, average="off", + compression={"mode": "off", "species_weighting": None}, species=None, periodic=False, sparse=False, @@ -132,19 +133,42 @@ def __init__( function is also specified, this constant will override it for the central atoms. - crossover (bool): Determines if crossover of atomic types should - be included in the power spectrum. If enabled, the power - spectrum is calculated over all unique species combinations Z - and Z'. If disabled, the power spectrum does not contain - cross-species information and is only run over each unique - species Z. Turned on by default to correspond to the original - definition average (str): The averaging mode over the centers of interest. Valid options are: * ``"off"``: No averaging. * ``"inner"``: Averaging over sites before summing up the magnetic quantum numbers: :math:`p_{nn'l}^{Z_1,Z_2} \sim \sum_m (\\frac{1}{n} \sum_i c_{nlm}^{i, Z_1})^{*} (\\frac{1}{n} \sum_i c_{n'lm}^{i, Z_2})` * ``"outer"``: Averaging over the power spectrum of different sites: :math:`p_{nn'l}^{Z_1,Z_2} \sim \\frac{1}{n} \sum_i \sum_m (c_{nlm}^{i, Z_1})^{*} (c_{n'lm}^{i, Z_2})` + 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: + + * ```"mode"```: Specifies the type of compression. This can be one of: + * ``"off"``: No compression; default. + * ``"mu2"``: The SOAP feature vector is generated in an element-agnostic way, so that + the size of the feature vector is now independent of the number of elements (see Darby et al + below for details). It is still possible when using this option to construct a feature + vector that distinguishes between elements by supplying element-specific weighting under + "species_weighting", see below. + * ``"mu1nu1"``: Implements the mu=1, nu=1 feature compression scheme from Darby et al.: :math:`p_{inn'l}^{Z_1,Z_2} \sum_m (c_{nlm}^{i, Z_1})^{*} (\sum_z c_{n'lm}^{i, z})`. + In other words, each coefficient for each species is multiplied by a "species-mu2" sum over the corresponding set of coefficients for all other species. + If this option is selected, features are generated for each center, but the number of features (the size of each feature vector) scales linearly rather than + quadratically with the number of elements in the system. + * ``"crossover"``: The power spectrum does not contain cross-species information + and is only run over each unique species Z. In this configuration, the size of + the feature vector scales linearly with the number of elements in the system. + * ```"species_weighting"```: Either None or a dictionary mapping each species to a + species-specific weight. If None, there is no species-specific weighting. If a dictionary, + must contain a matching key for each species in the ``species`` iterable. + The main use of species weighting is to weight each element differently when using + the "mu2" option for ``compression``. + + For reference see: + "Darby, J.P., Kermode, J.R. & Csányi, G. + Compressing local atomic neighbourhood descriptors. + npj Comput Mater 8, 166 (2022). https://doi.org/10.1038/s41524-022-00847-y" + species (iterable): The chemical species as a list of atomic numbers or as a list of chemical symbols. Notice that this is not the atomic numbers that are present for an individual system, but @@ -174,6 +198,13 @@ def __init__( # Setup the involved chemical species self.species = species + # If species weighting is supplied, ensure it is valid and set + # it up. + if "species_weighting" in compression: + self.species_weights = compression["species_weighting"] + else: + self.species_weights = None + # Test that general settings are valid if sigma <= 0: raise ValueError( @@ -199,6 +230,15 @@ def __init__( "one of the following: {}".format(average, supported_average) ) + supported_compression = set(("off", "mu2", "mu1nu1", "crossover")) + if compression["mode"] not in supported_compression: + raise ValueError( + "Invalid compression mode '{}' given. Please use " + "one of the following: {}".format( + compression["mode"], supported_compression + ) + ) + if not (weighting or r_cut): raise ValueError("Either weighting or r_cut need to be defined") if weighting: @@ -274,7 +314,7 @@ def __init__( self._l_max = l_max self._rbf = rbf self.average = average - self.crossover = crossover + self.compression = compression["mode"] def prepare_centers(self, system, centers=None): """Validates and prepares the centers for the C++ extension.""" @@ -419,7 +459,7 @@ def create( # Determine if the outputs have a fixed size n_features = self.get_number_of_features() static_size = None - if self.average == "outer" or self.average == "inner": + if self.average != "off": static_size = [n_features] else: if centers is None: @@ -497,13 +537,14 @@ def create_single(self, system, centers=None): self._l_max, self._eta, self._weighting, - self.crossover, self.average, cutoff_padding, alphas, betas, self._atomic_numbers, + self.species_weights, self.periodic, + self.compression, ) # Calculate analytically with extension @@ -528,13 +569,14 @@ def create_single(self, system, centers=None): self._l_max, self._eta, self._weighting, - self.crossover, self.average, cutoff_padding, rx, gss, self._atomic_numbers, + self.species_weights, self.periodic, + self.compression, ) soap_poly.create( soap_mat, @@ -576,6 +618,10 @@ def validate_derivatives_method(self, method, attach): raise ValueError( "Analytical derivatives currently not available for averaged output." ) + if self.compression not in ["off", "crossover"]: + raise ValueError( + "Analytical derivatives not currently available for mu1nu1, mu2 compression." + ) if self.periodic: raise ValueError( "Analytical derivatives currently not available for periodic systems." @@ -639,15 +685,15 @@ def derivatives_numerical( self._l_max, self._eta, self._weighting, - self.crossover, self.average, cutoff_padding, alphas, betas, self._atomic_numbers, + self.species_weights, self.periodic, + self.compression, ) - # Calculate numerically with extension soap_gto.derivatives_numerical( d, @@ -673,13 +719,14 @@ def derivatives_numerical( self._l_max, self._eta, self._weighting, - self.crossover, self.average, cutoff_padding, rx, gss, self._atomic_numbers, + self.species_weights, self.periodic, + self.compression, ) soap_poly.derivatives_numerical( d, @@ -742,13 +789,14 @@ def derivatives_analytical( self._l_max, self._eta, self._weighting, - self.crossover, self.average, cutoff_padding, alphas, betas, self._atomic_numbers, + self.species_weights, self.periodic, + self.compression, ) # These arrays are only used internally by the C++ code. @@ -808,6 +856,60 @@ def species(self, value): self.index_to_atomic_number[i_atom] = atomic_number self.n_elements = len(self._atomic_numbers) + @property + def species_weights(self): + return self._species_weights + + @species_weights.setter + def species_weights(self, value): + """Used to check the validity of species weighting and set it up. + Note that species must already be set up in order to set species + weighting. + + Args: + value(iterable): Chemical species either as a list of atomic + numbers or list of chemical symbols. + """ + if value is None: + self._species_weights = np.ones((self.n_elements)) + else: + if not isinstance(value, dict): + raise ValueError( + "Invalid species weighting '{}' given. Species weighting must " + "be either None or a dict.".format(value) + ) + + if len(value) != self.n_elements: + raise ValueError( + "The species_weighting dictionary, " + "if supplied, must contain the same keys as " + "the list of accepted species." + ) + species_weights = [] + for specie in list(self.species): + if specie not in value: + raise ValueError( + "The species_weighting dictionary, " + "if supplied, must contain the same keys as " + "the list of accepted species." + ) + if isinstance(specie, (int, np.integer)): + if specie <= 0: + raise ValueError( + "Species weighting {} contained a zero or negative " + "atomic number.".format(value) + ) + species_weights.append((value[specie], specie)) + else: + species_weights.append( + (value[specie], ase.data.atomic_numbers.get(specie)) + ) + + species_weights = [ + s[0] for s in sorted(species_weights, key=lambda x: x[1]) + ] + self._species_weights = np.array(species_weights).astype(np.float64) + def get_number_of_features(self): """Used to inquire the final number of features that this descriptor will have. @@ -816,11 +918,15 @@ def get_number_of_features(self): int: Number of features for this descriptor. """ n_elem = len(self._atomic_numbers) - if self.crossover: - n_elem_radial = n_elem * self._n_max - return int((n_elem_radial) * (n_elem_radial + 1) / 2 * (self._l_max + 1)) - else: + if self.compression == "mu2": + return int((self._n_max) * (self._n_max + 1) * (self._l_max + 1) / 2) + elif self.compression == "mu1nu1": + return int(self._n_max**2 * n_elem * (self._l_max + 1)) + + elif self.compression == "crossover": return int(n_elem * self._n_max * (self._n_max + 1) / 2 * (self._l_max + 1)) + n_elem_radial = n_elem * self._n_max + return int((n_elem_radial) * (n_elem_radial + 1) / 2 * (self._l_max + 1)) def get_location(self, species): """Can be used to query the location of a species combination in the @@ -868,9 +974,8 @@ def get_location(self, species): numbers = list(reversed(numbers)) i = numbers[0] j = numbers[1] - n_elem_feat_symm = self._n_max * (self._n_max + 1) / 2 * (self._l_max + 1) - - if self.crossover: + if self.compression == "off": + n_elem_feat_symm = self._n_max * (self._n_max + 1) / 2 * (self._l_max + 1) n_elem_feat_unsymm = self._n_max * self._n_max * (self._l_max + 1) n_elem_feat = n_elem_feat_symm if i == j else n_elem_feat_unsymm @@ -881,10 +986,20 @@ def get_location(self, species): start = int(m_symm * n_elem_feat_symm + m_unsymm * n_elem_feat_unsymm) end = int(start + n_elem_feat) - else: + elif self.compression == "mu2": + n_elem_feat_symm = self._n_max * (self._n_max + 1) * (self._l_max + 1) / 2 + start = 0 + end = int(0 + n_elem_feat_symm) + elif self.compression in ["mu1nu1", "crossover"]: + n_elem_feat_symm = self._n_max**2 * (self._l_max + 1) + if self.compression == "crossover": + n_elem_feat_symm = ( + self._n_max * (self._n_max + 1) * (self._l_max + 1) / 2 + ) if i != j: raise ValueError( - "Crossover is set to False. No cross-species output " "available" + "Compression has been selected. " + "No cross-species output available" ) start = int(i * n_elem_feat_symm) end = int(start + n_elem_feat_symm) diff --git a/dscribe/ext/descriptor.cpp b/dscribe/ext/descriptor.cpp index 31817bbe..d6960a70 100644 --- a/dscribe/ext/descriptor.cpp +++ b/dscribe/ext/descriptor.cpp @@ -1,11 +1,8 @@ /*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. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. diff --git a/dscribe/ext/ext.cpp b/dscribe/ext/ext.cpp index 6dfae27d..b85b9fc3 100644 --- a/dscribe/ext/ext.cpp +++ b/dscribe/ext/ext.cpp @@ -56,14 +56,14 @@ PYBIND11_MODULE(ext, m) { // SOAP py::class_(m, "SOAPGTO") - .def(py::init, py::array_t, py::array_t, bool>()) + .def(py::init, py::array_t, py::array_t, py::array_t, bool, string>()) .def("create", overload_cast_, py::array_t, py::array_t, py::array_t >()(&SOAPGTO::create, py::const_)) .def("create", overload_cast_, py::array_t, py::array_t, py::array_t, py::array_t, py::array_t >()(&SOAPGTO::create, py::const_)) .def("create", overload_cast_, py::array_t, py::array_t, py::array_t, CellList>()(&SOAPGTO::create, py::const_)) .def("derivatives_numerical", &SOAPGTO::derivatives_numerical) .def("derivatives_analytical", &SOAPGTO::derivatives_analytical); py::class_(m, "SOAPPolynomial") - .def(py::init, py::array_t, py::array_t, bool >()) + .def(py::init, py::array_t, py::array_t, py::array_t, bool, string>()) .def("create", overload_cast_, py::array_t, py::array_t, py::array_t >()(&SOAPPolynomial::create, py::const_)) .def("create", overload_cast_, py::array_t, py::array_t, py::array_t, py::array_t, py::array_t >()(&SOAPPolynomial::create, py::const_)) .def("create", overload_cast_, py::array_t, py::array_t, py::array_t, CellList>()(&SOAPPolynomial::create, py::const_)) diff --git a/dscribe/ext/soap.cpp b/dscribe/ext/soap.cpp index fac60100..8b84726c 100644 --- a/dscribe/ext/soap.cpp +++ b/dscribe/ext/soap.cpp @@ -25,13 +25,14 @@ SOAPGTO::SOAPGTO( int l_max, double eta, py::dict weighting, - bool crossover, string average, double cutoff_padding, py::array_t alphas, py::array_t betas, py::array_t species, - bool periodic + py::array_t species_weights, + bool periodic, + string compression ) : Descriptor(periodic, average, r_cut+cutoff_padding) , r_cut(r_cut) @@ -39,11 +40,12 @@ SOAPGTO::SOAPGTO( , l_max(l_max) , eta(eta) , weighting(weighting) - , crossover(crossover) , cutoff_padding(cutoff_padding) , alphas(alphas) , betas(betas) , species(species) + , species_weights(species_weights) + , compression(compression) { } @@ -108,14 +110,15 @@ void SOAPGTO::create( this->betas, atomic_numbers, this->species, + this->species_weights, this->r_cut, this->cutoff_padding, this->n_max, this->l_max, this->eta, this->weighting, - this->crossover, this->average, + this->compression, indices, false, true, @@ -127,9 +130,15 @@ void SOAPGTO::create( int SOAPGTO::get_number_of_features() const { int n_species = this->species.shape(0); - return this->crossover - ? (n_species*this->n_max)*(n_species*this->n_max+1)/2*(this->l_max+1) - : n_species*(this->l_max+1)*((this->n_max+1)*this->n_max)/2; + if ( this->compression == "mu1nu1" ){ + return (n_species*this->n_max*this->n_max) * (this->l_max+1); + } else if ( this->compression == "mu2" ){ + return (this->n_max * (this->n_max+1) * (this->l_max+1) / 2); + } else if ( this->compression == "crossover" ){ + return n_species*(this->l_max+1)*((this->n_max+1)*this->n_max)/2; + } else{ + return (n_species*this->n_max)*(n_species*this->n_max+1)*(this->l_max+1)/2; + } } void SOAPGTO::derivatives_analytical( @@ -174,14 +183,15 @@ void SOAPGTO::derivatives_analytical( this->betas, atomic_numbers, this->species, + this->species_weights, this->r_cut, this->cutoff_padding, this->n_max, this->l_max, this->eta, this->weighting, - this->crossover, this->average, + this->compression, indices, attach, return_descriptor, @@ -196,13 +206,14 @@ SOAPPolynomial::SOAPPolynomial( int l_max, double eta, py::dict weighting, - bool crossover, string average, double cutoff_padding, py::array_t rx, py::array_t gss, py::array_t species, - bool periodic + py::array_t species_weights, + bool periodic, + string compression ) : Descriptor(periodic, average, r_cut+cutoff_padding) , r_cut(r_cut) @@ -210,11 +221,12 @@ SOAPPolynomial::SOAPPolynomial( , l_max(l_max) , eta(eta) , weighting(weighting) - , crossover(crossover) , cutoff_padding(cutoff_padding) , rx(rx) , gss(gss) , species(species) + , species_weights(species_weights) + , compression(compression) { } @@ -264,6 +276,7 @@ void SOAPPolynomial::create( centers, atomic_numbers, this->species, + this->species_weights, this->r_cut, this->cutoff_padding, this->n_max, @@ -272,8 +285,8 @@ void SOAPPolynomial::create( this->weighting, this->rx, this->gss, - this->crossover, this->average, + this->compression, cell_list ); } @@ -281,7 +294,13 @@ void SOAPPolynomial::create( int SOAPPolynomial::get_number_of_features() const { int n_species = this->species.shape(0); - return this->crossover - ? (n_species*this->n_max)*(n_species*this->n_max+1)/2*(this->l_max+1) - : n_species*(this->l_max+1)*((this->n_max+1)*this->n_max)/2; + if ( this->compression == "mu1nu1" ){ + return (n_species*this->n_max*this->n_max) * (this->l_max+1); + } else if ( this->compression == "mu2" ){ + return (this->n_max * (this->n_max+1) * (this->l_max+1) / 2); + } else if ( this->compression == "crossover" ){ + return n_species*(this->l_max+1)*((this->n_max+1)*this->n_max)/2; + } else{ + return (n_species*this->n_max)*(n_species*this->n_max+1)/2*(this->l_max+1); + } } diff --git a/dscribe/ext/soap.h b/dscribe/ext/soap.h index 44d37736..f196a739 100644 --- a/dscribe/ext/soap.h +++ b/dscribe/ext/soap.h @@ -38,13 +38,14 @@ class SOAPGTO: public Descriptor { int l_max, double eta, py::dict weighting, - bool crossover, string average, double cutoff_padding, py::array_t alphas, py::array_t betas, py::array_t species, - bool periodic + py::array_t species_weights, + bool periodic, + string compression ); /** * For creating SOAP output. @@ -104,11 +105,12 @@ class SOAPGTO: public Descriptor { const int l_max; const double eta; const py::dict weighting; - const bool crossover; const double cutoff_padding; const py::array_t alphas; const py::array_t betas; const py::array_t species; + const py::array_t species_weights; + const string compression; }; /** @@ -125,13 +127,14 @@ class SOAPPolynomial: public Descriptor { int l_max, double eta, py::dict weighting, - bool crossover, string average, double cutoff_padding, py::array_t rx, py::array_t gss, py::array_t species, - bool periodic + py::array_t species_weights, + bool periodic, + string compression ); /** * For creating SOAP output. @@ -171,11 +174,12 @@ class SOAPPolynomial: public Descriptor { const int l_max; const double eta; const py::dict weighting; - const bool crossover; const double cutoff_padding; const py::array_t rx; const py::array_t gss; const py::array_t species; + const py::array_t species_weights; + const string compression; }; #endif diff --git a/dscribe/ext/soapGTO.cpp b/dscribe/ext/soapGTO.cpp index 349a6bd5..dbf1e9c0 100644 --- a/dscribe/ext/soapGTO.cpp +++ b/dscribe/ext/soapGTO.cpp @@ -2290,6 +2290,66 @@ void getPD( } } } + + +//================================================================================================ +/** + * Used to calculate the partial power spectrum with the mu=1, nu=1 compression + * scheme from Darby et al. It is possible to implement the other compression + * schemes from Darby et al. by modifying the one shown here, although the mu=1 + * nu=1 performed by far the best in their experiments and is most likely + * to be the one of interest for most purposes. This compression scheme + * scales linearly with the number of elements and is thus much more practical + * for many-element systems. + */ +void getPDWithCompression( + py::detail::unchecked_mutable_reference &descriptor_mu, + py::detail::unchecked_reference &Cnnd_u, + py::detail::unchecked_reference &Cnnd_ave_mu, + int Ns, + int Ts, + int nCenters, + int lMax +) { + + // The power spectrum is multiplied by an l-dependent prefactor that comes + // from the normalization of the Wigner D matrices. This prefactor is + // mentioned in the arrata of the original SOAP paper: On representing + // chemical environments, Phys. Rev. B 87, 184115 (2013). Here the square + // root of the prefactor in the dot-product kernel is used, so that after a + // possible dot-product the full prefactor is recovered. + for(int i = 0; i < nCenters; i++){ + int shiftAll = 0; + for(int j = 0; j < Ts; j++){ + for(int m=0; m <= lMax; m++){ + double prel; + if(m > 1){prel = PI*sqrt(8.0/(2.0*m+1.0))*PI3;} + else{prel = PI*sqrt(8.0/(2.0*m+1.0));} + for(int k = 0; k < Ns; k++){ + for(int kd = 0; kd < Ns; kd++){ + double buffDouble = 0; + for(int buffShift = m*m; buffShift < (m+1)*(m+1); buffShift++){ + //Notice that we multiply the coefficient i,j,k,bS against + //the sum of coefficients (over all species in the environment) + //i,kd,bS. This is the mu=1,nu=1 compression scheme from Darby + //et al. + buffDouble += Cnnd_u(i,j,k,buffShift) * Cnnd_ave_mu(i,kd,buffShift); + } + descriptor_mu(i, shiftAll) = prel*buffDouble; + shiftAll++; + } + } + } + } + } +} + + + + + + + //=========================================================================================== /** * Used to calculate the partial power spectrum derivatives. @@ -2383,14 +2443,15 @@ void soapGTO( py::array_t betasArr, py::array_t atomicNumbersArr, py::array_t orderedSpeciesArr, + py::array_t speciesWeightsArr, const double rCut, const double cutoffPadding, const int nMax, const int lMax, const double eta, py::dict weighting, - const bool crossover, string average, + string compression, py::array_t indices, const bool attach, const bool return_descriptor, @@ -2402,6 +2463,8 @@ void soapGTO( auto derivatives_mu = derivatives.mutable_unchecked<4>(); auto atomicNumbers = atomicNumbersArr.unchecked<1>(); auto species = orderedSpeciesArr.unchecked<1>(); + auto speciesWeights = speciesWeightsArr.unchecked<1>(); + int nSpecies = orderedSpeciesArr.shape(0); auto indices_u = indices.unchecked<1>(); double *alphas = (double*)alphasArr.request().ptr; @@ -2412,9 +2475,19 @@ void soapGTO( auto centers_u = centers.unchecked<2>(); auto center_indices_u = center_indices.unchecked<1>(); auto positions_u = positions.unchecked<2>(); - const int nFeatures = crossover - ? (nSpecies*nMax)*(nSpecies*nMax+1)/2*(lMax+1) - : nSpecies*(lMax+1)*((nMax+1)*nMax)/2; + int nFeatures = 0; + bool crossover = true; + if ( compression == "mu1nu1" ){ + nFeatures = nSpecies*(lMax+1)*(nMax*nMax); + } else if ( compression == "mu2" ){ + nSpecies = 1; + nFeatures = nMax * (nMax+1) * (lMax+1) / 2; + } else if ( compression == "crossover" ){ + nFeatures = nSpecies*(lMax+1)*((nMax+1)*nMax)/2; + crossover = false; + } else{ + nFeatures = (nSpecies*nMax)*(nSpecies*nMax+1)/2*(lMax+1); + } double* weights = (double*) malloc(sizeof(double)*totalAN); double* dx = (double*)malloc(sizeof(double)*totalAN); double* dy = (double*)malloc(sizeof(double)*totalAN); double* dz = (double*)malloc(sizeof(double)*totalAN); double* x2 = (double*)malloc(sizeof(double)*totalAN); double* x4 = (double*)malloc(sizeof(double)*totalAN); double* x6 = (double*)malloc(sizeof(double)*totalAN); @@ -2449,7 +2522,7 @@ void soapGTO( double* aOa = (double*) malloc((lMax+1)*nMax*sizeof(double)); // Initialize temporary numpy array for storing the coefficients and the - // averaged coefficients if inner averaging was requested. + // averaged coefficients if inner averaging was requested const int n_coeffs = nSpecies*nMax*(lMax + 1) * (lMax + 1); double* cnnd_raw = new double[nCenters*n_coeffs](); py::array_t cnnd({nCenters, nSpecies, nMax, (lMax + 1) * (lMax + 1)}, cnnd_raw); @@ -2459,6 +2532,19 @@ void soapGTO( cnnd_ave_raw = new double[n_coeffs](); cnnd_ave = py::array_t({1, nSpecies, nMax, (lMax + 1) * (lMax + 1)}, cnnd_ave_raw); } + //Also initialize temporary numpy array for storing the sum of the coefficients over all + //species without summing over m if feature compression was requested. + double* cnnd_compressed_raw; + py::array_t cnnd_compressed; + if (compression == "mu1nu1") { + if (average == "inner"){ + cnnd_compressed_raw = new double[nMax*(lMax+1)*(lMax+1)](); + cnnd_compressed = py::array_t({1, nMax, (lMax + 1) * (lMax + 1)}, cnnd_compressed_raw); + } else{ + cnnd_compressed_raw = new double[nCenters*nMax*(lMax+1)*(lMax+1)](); + cnnd_compressed = py::array_t({nCenters, nMax, (lMax + 1) * (lMax + 1)}, cnnd_compressed_raw); + } + } auto cnnd_u = cnnd.unchecked<4>(); auto cdevX_u = cdevX.unchecked<5>(); @@ -2491,23 +2577,58 @@ void soapGTO( double ix = centers_u(i, 0); double iy = centers_u(i, 1); double iz = centers_u(i, 2); CellListResult result = cell_list_atoms.getNeighboursForPosition(ix, iy, iz); - // Sort the neighbours by type - map> atomicTypeMap; - for (const int &idx : result.indices) {int Z = atomicNumbers(idx); atomicTypeMap[Z].push_back(idx);}; - - // Loop through neighbours sorted by type - for (const auto &ZIndexPair : atomicTypeMap) { + // Sort the neighbours by type, UNLESS using the mu2 compression scheme, + // in which case we basically treat all neighbors as same type. + if (compression != "mu2"){ + map> atomicTypeMap; + for (const int &idx : result.indices) {int Z = atomicNumbers(idx); atomicTypeMap[Z].push_back(idx);}; + // Loop through neighbours sorted by type + for (const auto &ZIndexPair : atomicTypeMap) { + + // j is the internal index for this atomic number + int j = ZIndexMap[ZIndexPair.first]; + int n_neighbours = ZIndexPair.second.size(); + + // Save the neighbour distances into the arrays dx, dy and dz + getDeltaD(dx, dy, dz, positions, ix, iy, iz, ZIndexPair.second); + getRsZsD(dx, x2, x4, x6, x8, x10, x12, x14, x16, x18, dy, y2, y4, y6, y8, y10, y12, y14, y16, y18, dz, r2, r4, r6, r8, r10, r12, r14, r16, r18, z2, z4, z6, z8, z10, z12, z14, z16, z18, r20, x20, y20, z20, n_neighbours, lMax); + getWeights(n_neighbours, r1, r2, true, weighting, weights); + + //Multiply all of the weights by the element-specific weights (default to 1). + //This enables straightforward implementation of element-specific weighting + //if so specified by user. + for(std::size_t k = 0; k < ZIndexPair.second.size(); ++k){ + int Z = atomicNumbers(ZIndexPair.second[k]); + int speciesIdx = ZIndexMap[Z]; + double weight = speciesWeights(speciesIdx); + weights[k] *= weight; + } - // j is the internal index for this atomic number - int j = ZIndexMap[ZIndexPair.first]; - int n_neighbours = ZIndexPair.second.size(); + getCfactorsD(preCoef, prCofDX, prCofDY, prCofDZ, n_neighbours, dx,x2, x4, x6, x8,x10,x12,x14,x16,x18, dy,y2, y4, y6, y8,y10,y12,y14,y16,y18, dz, z2, z4, z6, z8,z10,z12,z14,z16,z18, r2, r4, r6, r8,r10,r12,r14,r16,r18,r20, x20,y20,z20, totalAN, lMax, return_derivatives); + getCD(cdevX_mu, cdevY_mu, cdevZ_mu, prCofDX, prCofDY, prCofDZ, cnnd_mu, preCoef, dx, dy, dz, r2, weights, bOa, aOa, exes, totalAN, n_neighbours, nMax, nSpecies, lMax, i, centerAtomI, j, ZIndexPair.second, attach, return_derivatives); + } + // If using mu2 compression, treat all neighbors as being same element, + // except for user-specified element-specific weighting. + } else { + int n_neighbours = result.indices.size(); + + // Save the neighbour distances into the arrays dx, dy and dz + getDeltaD(dx, dy, dz, positions, ix, iy, iz, result.indices); + getRsZsD(dx, x2, x4, x6, x8, x10, x12, x14, x16, x18, dy, y2, y4, y6, y8, y10, y12, y14, y16, y18, dz, r2, r4, r6, r8, r10, r12, r14, r16, r18, z2, z4, z6, z8, z10, z12, z14, z16, z18, r20, x20, y20, z20, n_neighbours, lMax); + getWeights(n_neighbours, r1, r2, true, weighting, weights); + + //Multiply all of the weights by the element-specific weights (default to 1). + //This enables straightforward implementation of element-specific weighting + //if so specified by user. + for(std::size_t k = 0; k < result.indices.size(); ++k){ + int Z = atomicNumbers(result.indices[k]); + int speciesIdx = ZIndexMap[Z]; + double weight = speciesWeights(speciesIdx); + weights[k] *= weight; + } - // Save the neighbour distances into the arrays dx, dy and dz - getDeltaD(dx, dy, dz, positions, ix, iy, iz, ZIndexPair.second); - getRsZsD(dx, x2, x4, x6, x8, x10, x12, x14, x16, x18, dy, y2, y4, y6, y8, y10, y12, y14, y16, y18, dz, r2, r4, r6, r8, r10, r12, r14, r16, r18, z2, z4, z6, z8, z10, z12, z14, z16, z18, r20, x20, y20, z20, n_neighbours, lMax); - getWeights(n_neighbours, r1, r2, true, weighting, weights); - getCfactorsD(preCoef, prCofDX, prCofDY, prCofDZ, n_neighbours, dx,x2, x4, x6, x8,x10,x12,x14,x16,x18, dy,y2, y4, y6, y8,y10,y12,y14,y16,y18, dz, z2, z4, z6, z8,z10,z12,z14,z16,z18, r2, r4, r6, r8,r10,r12,r14,r16,r18,r20, x20,y20,z20, totalAN, lMax, return_derivatives); - getCD(cdevX_mu, cdevY_mu, cdevZ_mu, prCofDX, prCofDY, prCofDZ, cnnd_mu, preCoef, dx, dy, dz, r2, weights, bOa, aOa, exes, totalAN, n_neighbours, nMax, nSpecies, lMax, i, centerAtomI, j, ZIndexPair.second, attach, return_derivatives); + getCfactorsD(preCoef, prCofDX, prCofDY, prCofDZ, n_neighbours, dx,x2, x4, x6, x8,x10,x12,x14,x16,x18, dy,y2, y4, y6, y8,y10,y12,y14,y16,y18, dz, z2, z4, z6, z8,z10,z12,z14,z16,z18, r2, r4, r6, r8,r10,r12,r14,r16,r18,r20, x20,y20,z20, totalAN, lMax, return_derivatives); + getCD(cdevX_mu, cdevY_mu, cdevZ_mu, prCofDX, prCofDY, prCofDZ, cnnd_mu, preCoef, dx, dy, dz, r2, weights, bOa, aOa, exes, totalAN, n_neighbours, nMax, nSpecies, lMax, i, centerAtomI, 0, result.indices, attach, return_derivatives); } } free(dx); free(x2); free(x4); free(x6); free(x8); free(x10); free(x12); free(x14); free(x16); free(x18); @@ -2550,8 +2671,22 @@ void soapGTO( } } } - getPD(descriptor_mu, cnnd_ave_u, nMax, nSpecies, 1, lMax, crossover); - delete [] cnnd_ave_raw; + if (compression == "mu1nu1"){ + auto cnnd_compressed_mu = cnnd_compressed.mutable_unchecked<3>(); + for (int j = 0; j < nSpecies; j++) { + for (int k = 0; k < nMax; k++) { + for (int l = 0; l < (lMax + 1) * (lMax + 1); l++) { + cnnd_compressed_mu(0, k, l) += cnnd_ave_mu(0, j, k, l); + } + } + } + getPDWithCompression(descriptor_mu, cnnd_ave_mu, cnnd_compressed_mu, nMax, nSpecies, 1, lMax); + delete [] cnnd_compressed_raw; + delete [] cnnd_ave_raw; + } else{ + getPD(descriptor_mu, cnnd_ave_u, nMax, nSpecies, 1, lMax, crossover); + delete [] cnnd_ave_raw; + } // If outer averaging is requested, average the power spectrum across the // centers. } else if (average == "outer") { @@ -2560,7 +2695,23 @@ void soapGTO( double* ps_temp_raw = new double[nCenters*nFeatures](); py::array_t ps_temp({nCenters, nFeatures}, ps_temp_raw); auto ps_temp_mu = ps_temp.mutable_unchecked<2>(); - getPD(ps_temp_mu, cnnd_u, nMax, nSpecies, nCenters, lMax, crossover); + + if (compression == "mu1nu1"){ + auto cnnd_compressed_mu = cnnd_compressed.mutable_unchecked<3>(); + for (int i = 0; i < nCenters; i++) { + for (int j = 0; j < nSpecies; j++) { + for (int k = 0; k < nMax; k++) { + for (int l = 0; l < (lMax + 1) * (lMax + 1); l++) { + cnnd_compressed_mu(i, k, l) += cnnd_u(i, j, k, l); + } + } + } + } + getPDWithCompression(ps_temp_mu, cnnd_u, cnnd_compressed_mu, nMax, nSpecies, nCenters, lMax); + delete [] cnnd_compressed_raw; + } else{ + getPD(ps_temp_mu, cnnd_u, nMax, nSpecies, nCenters, lMax, crossover); + } for (int i = 0; i < nCenters; i++) { for (int j = 0; j < nFeatures; j++) { descriptor_mu(0, j) += ps_temp_mu(i, j); @@ -2572,11 +2723,30 @@ void soapGTO( delete [] ps_temp_raw; // Regular power spectrum without averaging } else { - getPD(descriptor_mu, cnnd_u, nMax, nSpecies, nCenters, lMax, crossover); + if (compression == "mu1nu1"){ + auto cnnd_compressed_mu = cnnd_compressed.mutable_unchecked<3>(); + for (int i = 0; i < nCenters; i++) { + for (int j = 0; j < nSpecies; j++) { + for (int k = 0; k < nMax; k++) { + for (int l = 0; l < (lMax + 1) * (lMax + 1); l++) { + cnnd_compressed_mu(i, k, l) += cnnd_u(i, j, k, l); + } + } + } + } + getPDWithCompression(descriptor_mu, cnnd_u, cnnd_compressed_mu, nMax, nSpecies, nCenters, lMax); + delete [] cnnd_compressed_raw; + } else{ + getPD(descriptor_mu, cnnd_u, nMax, nSpecies, nCenters, lMax, crossover); + } } } - // Calculate the derivatives + // Calculate the derivatives. Note that this should not be attempted usnig the + // function call below if mu1nu1 compression has been selected, in which + // case this will not return a correct result. Currently the Python wrapper + // does not in any case permit analytical derivative calculation if mu1nu1 compression + // is used. if (return_derivatives) { getPDev(derivatives_mu, positions_u, indices_u, cell_list_centers, cdevX_u, cdevY_u, cdevZ_u, cnnd_u, nMax, nSpecies, nCenters, lMax, crossover); } diff --git a/dscribe/ext/soapGTO.h b/dscribe/ext/soapGTO.h index 1cc198f3..4af6b7a2 100644 --- a/dscribe/ext/soapGTO.h +++ b/dscribe/ext/soapGTO.h @@ -29,6 +29,11 @@ void getAlphaBeta(double* aOa, double* bOa, double* alphas, double* betas, int N void getCfactors(double* preCoef, int Asize, double* x,double* x2, double* x4, double* x6, double* x8, double* x10,double* x12,double* x14,double* x16,double* x18, double* y,double* y2, double* y4, double* y6, double* y8, double* y10,double* y12,double* y14,double* y16,double* y18, double* z, double* z2, double* z4, double* z6, double* z8, double* z10,double* z12,double* z14,double* z16,double* z18, double* r2, double* r4, double* r6, double* r8,double* r10,double* r12,double* r14,double* r16,double* r18, int totalAN, int lMax); void getC(double* CDevX,double* CDevY, double* CDevZ, double* C, double* preCoef, double* x, double* y, double* z,double* r2, double* bOa, double* aOa, double* exes, int totalAN, int Asize, int Ns, int Ntypes, int lMax, int posI, int typeJ,vector&indices); void getP(double* soapMat, double* Cnnd, int Ns, int Ts, int Hs, int lMax); +void getPWithCompression( + py::detail::unchecked_mutable_reference &descriptor_mu, + py::detail::unchecked_reference &Cnnd_u, + py::detail::unchecked_reference &Cnnd_ave_mu, int Ns, + int Ts, int nCenters, int lMax ); void soapGTO( py::array_t derivatives, py::array_t descriptor, @@ -42,14 +47,15 @@ void soapGTO( py::array_t betasArr, py::array_t atomicNumbersArr, py::array_t orderedSpeciesArr, + py::array_t speciesWeightsArr, const double rCut, const double cutoffPadding, const int Ns, const int lMax, const double eta, py::dict weighting, - const bool crossover, string average, + string compression, py::array_t indices, const bool attach, const bool return_descriptor, diff --git a/dscribe/ext/soapGeneral.cpp b/dscribe/ext/soapGeneral.cpp index 893cae63..ce418aab 100644 --- a/dscribe/ext/soapGeneral.cpp +++ b/dscribe/ext/soapGeneral.cpp @@ -1806,12 +1806,69 @@ void getP(py::detail::unchecked_mutable_reference &Ps, double* Cs, in } } } + + +/** + * Used to calculate the partial power spectrum with feature compression + * as described in Darby et al. Currently only for the mu = 1, nu = 1 + * compression described in Darby et al. (by far the best performing + * alternative that they evaluated). It could be adapted however to + * provide other compression alternatives. This compression scheme + * scales linearly with the number of elements and is thus far more + * practical for many-element systems. + * + * The power spectrum is multiplied by an l-dependent prefactor + * PI*sqrt(8.0/(2.0*l+1.0)); that comes from the normalization of the Wigner D + * matrices. This prefactor is mentioned in the errata of the original SOAP + * paper: On representing chemical environments, Phys. Rev. B 87, 184115 + * (2013). Here the square root of the prefactor in the dot-product kernel is + * used, so that after a possible dot-product the full prefactor is recovered. + */ +void getPWithCompression(py::detail::unchecked_mutable_reference &Ps, double* Cs, + double* CsSummed, int Nt, int lMax, int nMax, int Hs, + double rCut2, int nFeatures, int nCoeffs, int nCompressionCoeffs) +{ + // The current index in the final power spectrum array. + int pIdx = 0; + + for (int i = 0; i < Hs; i++) { + pIdx = 0; + for (int Z1 = 0; Z1 < Nt; Z1++) { + for (int l = 0; l < lMax+1; l++) { + for (int N1 = 0; N1 < nMax; N1++) { + for (int N2 = 0; N2 < nMax; N2++) { + double sum = 0; + for (int m = 0; m < l+1; m++) { + if (m == 0) { + sum += Cs[i*nCoeffs+2*Z1*(lMax+1)*(lMax+1)*nMax + 2*(lMax+1)*(lMax+1)*N1 + l*2*(lMax+1)] // m=0 + *CsSummed[i*nCompressionCoeffs + 2*(lMax+1)*(lMax+1)*N2 + l*2*(lMax+1)]; // m=0 + } else { + sum += 2*(Cs[i*nCoeffs+2*Z1*(lMax+1)*(lMax+1)*nMax + 2*(lMax+1)*(lMax+1)*N1 + l*2*(lMax+1) + 2*m] + *CsSummed[i*nCompressionCoeffs + 2*(lMax+1)*(lMax+1)*N2 + l*2*(lMax+1) + 2*m] + +Cs[i*nCoeffs+2*Z1*(lMax+1)*(lMax+1)*nMax + 2*(lMax+1)*(lMax+1)*N1 + l*2*(lMax+1) + 2*m + 1] + *CsSummed[i*nCompressionCoeffs + 2*(lMax+1)*(lMax+1)*N2 + l*2*(lMax+1) + 2*m + 1]); + } + } + Ps(i, pIdx) = PI*sqrt(8.0/(2.0*l+1.0))*39.478417604*rCut2*sum; // Normalization and other constants + ++pIdx; + } + } + } + } + } +} + + + + + void soapGeneral( py::array_t PsArr, py::array_t positions, py::array_t HposArr, py::array_t atomicNumbersArr, py::array_t orderedSpeciesArr, + py::array_t speciesWeightsArr, double rCut, double cutoffPadding, int nMax, @@ -1820,17 +1877,30 @@ void soapGeneral( py::dict weighting, py::array_t rwArr, py::array_t gssArr, - bool crossover, string average, + string compression, CellList cellList) { int nAtoms = atomicNumbersArr.shape(0); int Nt = orderedSpeciesArr.shape(0); int Hs = HposArr.shape(0); - int nFeatures = crossover ? (Nt*nMax)*(Nt*nMax+1)/2*(lMax+1) : Nt*(lMax+1)*((nMax+1)*nMax)/2; + int nFeatures = 0; + bool crossover = true; + if ( compression == "mu1nu1" ){ + nFeatures = Nt*(lMax+1)*(nMax*nMax); + } else if( compression == "mu2" ){ + Nt = 1; + nFeatures = nMax*(nMax+1)*(lMax+1)/2; + } else if ( compression == "crossover" ){ + crossover = false; + nFeatures = Nt*(lMax+1)*((nMax+1)*nMax)/2; + } else{ + nFeatures = (Nt*nMax)*(Nt*nMax+1)*(lMax+1)/2; + } auto atomicNumbers = atomicNumbersArr.unchecked<1>(); auto species = orderedSpeciesArr.unchecked<1>(); auto Ps = PsArr.mutable_unchecked<2>(); + auto speciesWeights = speciesWeightsArr.unchecked<1>(); double *Hpos = (double*)HposArr.request().ptr; double *rw = (double*)rwArr.request().ptr; double *gss = (double*)gssArr.request().ptr; @@ -1853,6 +1923,7 @@ void soapGeneral( // Initialize arrays for storing the C coefficients. int nCoeffs = 2*(lMax+1)*(lMax+1)*nMax*Nt; + int nCompressionCoeffs = 0; int nCoeffsAll = nCoeffs*Hs; double* Cs = (double*) malloc(sizeof(double)*nCoeffsAll); double* CsAve; @@ -1861,6 +1932,18 @@ void soapGeneral( CsAve = (double*) malloc(nCoeffs*sizeof(double)); memset(CsAve, 0.0, nCoeffs*sizeof(double)); } + double* CsCompressed; + if (compression == "mu1nu1") { + if (average == "inner"){ + nCompressionCoeffs = 2*(lMax+1)*(lMax+1)*nMax; + CsCompressed = (double*) malloc(nCompressionCoeffs*sizeof(double)); + memset(CsCompressed, 0.0, nCompressionCoeffs*sizeof(double)); + } else{ + nCompressionCoeffs = 2*(lMax+1)*(lMax+1)*nMax; + CsCompressed = (double*) malloc(Hs*nCompressionCoeffs*sizeof(double)); + memset(CsCompressed, 0.0, Hs*nCompressionCoeffs*sizeof(double)); + } + } // Create a mapping between an atomic index and its internal index in the // output. The list of species is already ordered. @@ -1878,35 +1961,79 @@ void soapGeneral( double iz = Hpos[3*i+2]; CellListResult result = cellList.getNeighboursForPosition(ix, iy, iz); - // Sort the neighbours by type - map> atomicTypeMap; - for (const int &idx : result.indices) { - int Z = atomicNumbers(idx); - atomicTypeMap[Z].push_back(idx); - }; + // Sort the neighbours by type, unless using mu2 compression, in + // which case we essentially assume all neighbors are same type (except + // for weighting purposes). + if (compression != "mu2"){ + map> atomicTypeMap; + for (const int &idx : result.indices) { + int Z = atomicNumbers(idx); + atomicTypeMap[Z].push_back(idx); + }; + // Loop through neighbours sorted by type + for (const auto &ZIndexPair : atomicTypeMap) { + + // j is the internal index for this atomic number + int j = ZIndexMap[ZIndexPair.first]; - // Loop through neighbours sorted by type - for (const auto &ZIndexPair : atomicTypeMap) { + double* Ylmi; double* Flir; double* summed; - // j is the internal index for this atomic number - int j = ZIndexMap[ZIndexPair.first]; + // Notice that due to the numerical integration the getDeltas + // function here has special functionality for positions that are + // centered on an atom. + pair neighbours = getDeltas(dx, dy, dz, ris, rw, rCut, oOri, oO4arri, minExp, pluExp, eta, positions, ix, iy, iz, ZIndexPair.second, rsize, i, j); + int nNeighbours = neighbours.first; + int nCenters = neighbours.second; + getWeights(nNeighbours + min(nCenters, 1), ris, NULL, false, weighting, weights); + //Multiply all of the weights by the element-specific weights (default to 1). + //This enables straightforward implementation of element-specific weighting + //if so specified by user. + for(std::size_t k = 0; k < ZIndexPair.second.size(); ++k){ + int Z = atomicNumbers(ZIndexPair.second[k]); + int speciesIdx = ZIndexMap[Z]; + double weight = speciesWeights(speciesIdx); + weights[k] *= weight; + } + + Flir = getFlir(oO4arri, ris, minExp, pluExp, nNeighbours, rsize, lMax); + Ylmi = getYlmi(dx, dy, dz, oOri, cf, nNeighbours, lMax); + summed = getIntegrand(Flir, Ylmi, rsize, nNeighbours, lMax, weights); + + getC(C, ws, rw2, gss, summed, rCut, lMax, rsize, nMax, nCenters, nNeighbours, eta, weights); + accumC(Cs, C, lMax, nMax, j, i, nCoeffs); + + free(Flir); + free(Ylmi); + free(summed); + } + } else { double* Ylmi; double* Flir; double* summed; // Notice that due to the numerical integration the getDeltas // function here has special functionality for positions that are // centered on an atom. - pair neighbours = getDeltas(dx, dy, dz, ris, rw, rCut, oOri, oO4arri, minExp, pluExp, eta, positions, ix, iy, iz, ZIndexPair.second, rsize, i, j); + pair neighbours = getDeltas(dx, dy, dz, ris, rw, rCut, oOri, oO4arri, minExp, pluExp, eta, positions, ix, iy, iz, result.indices, rsize, i, 0); int nNeighbours = neighbours.first; int nCenters = neighbours.second; getWeights(nNeighbours + min(nCenters, 1), ris, NULL, false, weighting, weights); + //Multiply all of the weights by the element-specific weights (default to 1). + //This enables straightforward implementation of element-specific weighting + //if so specified by user. + for(std::size_t k = 0; k < result.indices.size(); ++k){ + int Z = atomicNumbers(result.indices[k]); + int speciesIdx = ZIndexMap[Z]; + double weight = speciesWeights(speciesIdx); + weights[k] *= weight; + } + Flir = getFlir(oO4arri, ris, minExp, pluExp, nNeighbours, rsize, lMax); Ylmi = getYlmi(dx, dy, dz, oOri, cf, nNeighbours, lMax); summed = getIntegrand(Flir, Ylmi, rsize, nNeighbours, lMax, weights); getC(C, ws, rw2, gss, summed, rCut, lMax, rsize, nMax, nCenters, nNeighbours, eta, weights); - accumC(Cs, C, lMax, nMax, j, i, nCoeffs); + accumC(Cs, C, lMax, nMax, 0, i, nCoeffs); free(Flir); free(Ylmi); @@ -1925,8 +2052,24 @@ void soapGeneral( for (int j = 0; j < nCoeffs; j++) { CsAve[j] = CsAve[j] / (double)Hs; } - getP(Ps, CsAve, Nt, lMax, nMax, 1, rCut2, nFeatures, crossover, nCoeffs); - free(CsAve); + if (compression == "mu1nu1"){ + for (int j = 0; j < Nt; j++) { + for (int k = 0; k < nMax; k++){ + for (int l = 0; l < 2 * (lMax + 1) * (lMax + 1); l++){ + int inputPosition = 2*j*(lMax+1)*(lMax+1)*nMax + + 2*k*(lMax+1)*(lMax+1) + l; + int outputPosition = 2*k*(lMax+1)*(lMax+1) + l; + CsCompressed[outputPosition] += CsAve[inputPosition]; + } + } + } + getPWithCompression(Ps, CsAve, CsCompressed, Nt, lMax, nMax, 1, rCut2, nFeatures, + nCoeffs, nCompressionCoeffs); + free(CsCompressed); + } + else{ + getP(Ps, CsAve, Nt, lMax, nMax, 1, rCut2, nFeatures, crossover, nCoeffs); + } // Average the power spectrum across atoms } else if (average == "outer") { // We allocate the memory and give array_t a pointer to it. This way @@ -1934,7 +2077,28 @@ void soapGeneral( double* PsTemp = new double[nFeatures*Hs]; py::array_t PsTempArrChecked({Hs, nFeatures}, PsTemp); auto PsTempArr = PsTempArrChecked.mutable_unchecked<2>(); - getP(PsTempArr, Cs, Nt, lMax, nMax, Hs, rCut2, nFeatures, crossover, nCoeffs); + + if (compression == "mu1nu1"){ + for (int i = 0; i < Hs; i++) { + for (int j = 0; j < Nt; j++) { + for (int k = 0; k < nMax; k++){ + for (int l = 0; l < 2 * (lMax + 1) * (lMax + 1); l++){ + int inputPosition = i*nCoeffs + 2*j*(lMax+1)*(lMax+1)*nMax + + 2*k*(lMax+1)*(lMax+1) + l; + int outputPosition = i*nCompressionCoeffs + 2*k*(lMax+1)*(lMax+1) + l; + CsCompressed[outputPosition] += Cs[inputPosition]; + } + } + } + } + getPWithCompression(PsTempArr, Cs, CsCompressed, Nt, lMax, nMax, Hs, rCut2, nFeatures, + nCoeffs, nCompressionCoeffs); + free(CsCompressed); + } + else { + getP(PsTempArr, Cs, Nt, lMax, nMax, Hs, rCut2, nFeatures, crossover, nCoeffs); + } + for (int i = 0; i < Hs; i++) { for (int j = 0; j < nFeatures; j++) { Ps(0, j) += PsTempArr(i, j); @@ -1946,7 +2110,25 @@ void soapGeneral( free(PsTemp); // Regular power spectrum without averaging } else { - getP(Ps, Cs, Nt, lMax, nMax, Hs, rCut2, nFeatures, crossover, nCoeffs); + if (compression == "mu1nu1"){ + for (int i = 0; i < Hs; i++) { + for (int j = 0; j < Nt; j++) { + for (int k = 0; k < nMax; k++){ + for (int l = 0; l < 2 * (lMax + 1) * (lMax + 1); l++){ + int inputPosition = i*nCoeffs + 2*j*(lMax+1)*(lMax+1)*nMax + + 2*k*(lMax+1)*(lMax+1) + l; + int outputPosition = i*nCompressionCoeffs + 2*k*(lMax+1)*(lMax+1) + l; + CsCompressed[outputPosition] += Cs[inputPosition]; + } + } + } + } + getPWithCompression(Ps, Cs, CsCompressed, Nt, lMax, nMax, Hs, rCut2, nFeatures, + nCoeffs, nCompressionCoeffs); + free(CsCompressed); + } else { + getP(Ps, Cs, Nt, lMax, nMax, Hs, rCut2, nFeatures, crossover, nCoeffs); + } } free(Cs); diff --git a/dscribe/ext/soapGeneral.h b/dscribe/ext/soapGeneral.h index 6946e16e..4fae148a 100644 --- a/dscribe/ext/soapGeneral.h +++ b/dscribe/ext/soapGeneral.h @@ -40,12 +40,16 @@ double* getIntegrand(double* Flir, double* Ylmi,int rsize, int icount, int lMax) void getC(double* Cs, double* ws, double* rw2, double * gns, double* summed, double rCut,int lMax, int rsize, int gnsize, int nCenters, int nNeighbours, double eta, double* weights); void accumC(double* Cs, double* C, int lMax, int gnsize, int typeI, int i, int nCoeffs); void getP(py::detail::unchecked_mutable_reference &Ps, double* Cts, int Nt, int lMax, int nMax, int Hs, double rCut2, int nFeatures, bool crossover, int nCoeffs); +void getPWithCompression(py::detail::unchecked_mutable_reference &Ps, double* Cs, + double* CsSummed, int Nt, int lMax, int nMax, int Hs, + double rCut2, int nFeatures, int nCoeffs, int nCompressionCoeffs); void soapGeneral( py::array_t PsArr, py::array_t positions, py::array_t HposArr, py::array_t atomicNumbersArr, py::array_t orderedSpeciesArr, + py::array_t speciesWeightsArr, double rCut, double cutoffPadding, int nMax, @@ -54,8 +58,8 @@ void soapGeneral( py::dict weighting, py::array_t rwArr, py::array_t gssArr, - bool crossover, string average, + string compression, CellList cellList ); diff --git a/examples/kernels/averagekernel.py b/examples/kernels/averagekernel.py index 05090ca1..37209a25 100644 --- a/examples/kernels/averagekernel.py +++ b/examples/kernels/averagekernel.py @@ -12,7 +12,7 @@ # First we will have to create the features for atomic environments. Lets # use SOAP. -desc = SOAP(species=[1, 6, 7, 8], r_cut=5.0, n_max=2, l_max=2, sigma=0.2, periodic=False, crossover=True, sparse=False) +desc = SOAP(species=[1, 6, 7, 8], r_cut=5.0, n_max=2, l_max=2, sigma=0.2, periodic=False, compression={"mode":"off"}, sparse=False) a_features = desc.create(a) b_features = desc.create(b) diff --git a/examples/kernels/rematchkernel.py b/examples/kernels/rematchkernel.py index 821b10c0..cdc5497a 100644 --- a/examples/kernels/rematchkernel.py +++ b/examples/kernels/rematchkernel.py @@ -14,7 +14,7 @@ # First we will have to create the features for atomic environments. Lets # use SOAP. -desc = SOAP(species=["H", "O"], r_cut=5.0, n_max=2, l_max=2, sigma=0.2, periodic=False, crossover=True, sparse=False) +desc = SOAP(species=["H", "O"], r_cut=5.0, n_max=2, l_max=2, sigma=0.2, periodic=False, compression={"mode":"off"}, sparse=False) a_features = desc.create(a) b_features = desc.create(b) diff --git a/examples/readme.py b/examples/readme.py index 88b9f464..ad2f9492 100644 --- a/examples/readme.py +++ b/examples/readme.py @@ -8,7 +8,7 @@ # Setup descriptors cm_desc = CoulombMatrix(n_atoms_max=3, permutation="sorted_l2") -soap_desc = SOAP(species=["C", "H", "O", "N"], r_cut=5, n_max=8, l_max=6, crossover=True) +soap_desc = SOAP(species=["C", "H", "O", "N"], r_cut=5, n_max=8, l_max=6, compression={"mode":"off"}) # Create descriptors as numpy arrays or sparse arrays water = samples[0] diff --git a/examples/visualization/coloured.png b/examples/visualization/coloured.png new file mode 100644 index 00000000..4f287d38 Binary files /dev/null and b/examples/visualization/coloured.png differ diff --git a/examples/visualization/original.png b/examples/visualization/original.png new file mode 100644 index 00000000..1898e64c Binary files /dev/null and b/examples/visualization/original.png differ diff --git a/tests/test_kernels.py b/tests/test_kernels.py index e54410a1..6e00ef91 100644 --- a/tests/test_kernels.py +++ b/tests/test_kernels.py @@ -16,7 +16,7 @@ def test_difference(): l_max=2, sigma=0.2, periodic=False, - crossover=True, + compression={"mode": "off"}, sparse=False, ) @@ -54,7 +54,7 @@ def test_metrics(): l_max=2, sigma=0.2, periodic=False, - crossover=True, + compression={"mode": "off"}, sparse=False, ) a = molecule("H2O") @@ -86,7 +86,7 @@ def test_xy(): l_max=2, sigma=0.2, periodic=False, - crossover=True, + compression={"mode": "off"}, sparse=False, ) a = molecule("H2O") @@ -114,7 +114,7 @@ def test_sparse(): l_max=2, sigma=0.2, periodic=False, - crossover=True, + compression={"mode": "off"}, sparse=True, ) a = molecule("H2O") @@ -133,7 +133,7 @@ def test_difference(): l_max=2, sigma=0.2, periodic=False, - crossover=True, + compression={"mode": "off"}, sparse=False, ) @@ -173,7 +173,7 @@ def test_convergence_infinity(): l_max=2, sigma=0.2, periodic=False, - crossover=True, + compression={"mode": "off"}, sparse=False, ) a = molecule("H2O") @@ -203,7 +203,7 @@ def test_metrics(): l_max=2, sigma=0.2, periodic=False, - crossover=True, + compression={"mode": "off"}, sparse=False, ) a = molecule("H2O") @@ -235,7 +235,7 @@ def test_xy(): l_max=2, sigma=0.2, periodic=False, - crossover=True, + compression={"mode": "off"}, sparse=False, ) a = molecule("H2O") @@ -263,7 +263,7 @@ def test_sparse(): l_max=2, sigma=0.2, periodic=False, - crossover=True, + compression={"mode": "off"}, sparse=True, ) a = molecule("H2O") diff --git a/tests/test_soap.py b/tests/test_soap.py index ce767c52..5f330cc6 100644 --- a/tests/test_soap.py +++ b/tests/test_soap.py @@ -31,7 +31,7 @@ def soap(**kwargs): - """Returns a function that can be used to create a valid ACSF + """Returns a function that can be used to create a valid SOAP descriptor for a dataset. """ @@ -76,7 +76,7 @@ def get_soap_default_setup(): "r_cut": 2.0, "sigma": 0.55, "species": ["H", "C"], - "crossover": True, + "compression": {"mode": "off"}, } return [system, centers, soap_arguments] @@ -114,7 +114,7 @@ def get_soap_gto_l_max_setup(): "r_cut": 2.0, "sigma": 0.1, "species": ["H"], - "crossover": False, + "compression": {"mode": "crossover"}, } return (system, centers, soap_arguments) @@ -152,12 +152,12 @@ def get_soap_polynomial_l_max_setup(): "r_cut": 2.0, "sigma": 0.1, "species": ["H"], - "crossover": False, + "compression": {"mode": "crossover"}, } return (system, centers, soap_arguments) -def get_power_spectrum(coeffs, crossover=True, average="off"): +def get_power_spectrum(coeffs, crossover=True, average="off", compression="off"): """Given the expansion coefficients, returns the power spectrum.""" numerical_power_spectrum = [] shape = coeffs.shape @@ -165,6 +165,27 @@ def get_power_spectrum(coeffs, crossover=True, average="off"): n_species = shape[1] n_max = shape[2] l_max = shape[3] - 1 + # If using mu1nu1 compression (Darby et al. mu=1 nu=1 compression), + # the number of features scales linearly with # of elements, + # and the calculation is slightly different. + if compression == "mu1nu1": + species_summed_coef = coeffs.sum(axis=1) + for i in range(n_centers): + i_spectrum = [] + for zi in range(n_species): + for l in range(l_max + 1): + for ni in range(n_max): + for nj in range(n_max): + value = np.dot( + coeffs[i, zi, ni, l, :], + species_summed_coef[i, nj, l, :], + ) + prefactor = np.pi * np.sqrt(8 / (2 * l + 1)) + value *= prefactor + i_spectrum.append(value) + numerical_power_spectrum.append(i_spectrum) + return np.array(numerical_power_spectrum) + for i in range(n_centers): i_spectrum = [] for zi in range(n_species): @@ -223,20 +244,37 @@ def load_polynomial_coefficients(args): # ============================================================================= # Common tests with parametrizations that may be specific to this descriptor @pytest.mark.parametrize( - "species, n_max, l_max, crossover, n_features", + "species, n_max, l_max, average, n_features, compression", [ - (["H", "O"], 5, 5, True, int((5 + 1) * (5 * 2) * (5 * 2 + 1) / 2)), - (["H", "O"], 5, 5, False, int(5 * 2 * (5 + 1) / 2 * (5 + 1))), + ( + ["H", "O"], + 5, + 5, + "off", + int((5 + 1) * (5 * 2) * (5 * 2 + 1) / 2), + {"mode": "off"}, + ), + ( + ["H", "O"], + 5, + 5, + "off", + int(5 * 2 * (5 + 1) / 2 * (5 + 1)), + {"mode": "crossover"}, + ), + (["H", "O"], 5, 5, "off", int(5 * 5 * (5 + 1) * 2), {"mode": "mu1nu1"}), + (["H", "O"], 5, 5, "off", int(5 * (5 + 1) * (5 + 1) / 2), {"mode": "mu2"}), ], ) -def test_number_of_features(species, n_max, l_max, crossover, n_features): +def test_number_of_features(species, n_max, l_max, average, n_features, compression): desc = soap( species=species, r_cut=3, n_max=n_max, l_max=l_max, - crossover=crossover, + average=average, periodic=True, + compression=compression, ) assert_n_features(desc, n_features) @@ -299,8 +337,11 @@ def test_basis(rbf): @pytest.mark.parametrize("pbc", (False, True)) @pytest.mark.parametrize("attach", (False, True)) @pytest.mark.parametrize("average", ("off", "inner", "outer")) -@pytest.mark.parametrize("crossover", (True,)) -def test_derivatives_numerical(pbc, attach, average, rbf, crossover): +@pytest.mark.parametrize( + "compression", + ({"mode": "off"}, {"mode": "mu1nu1"}, {"mode": "mu2"}, {"mode": "crossover"}), +) +def test_derivatives_numerical(pbc, attach, average, rbf, compression): descriptor_func = soap( r_cut=3, n_max=4, @@ -308,17 +349,17 @@ def test_derivatives_numerical(pbc, attach, average, rbf, crossover): rbf=rbf, sparse=False, average=average, - crossover=crossover, periodic=pbc, dtype="float64", + compression=compression, ) assert_derivatives(descriptor_func, "numerical", pbc, attach=attach) @pytest.mark.parametrize("pbc, average, rbf", [(False, "off", "gto")]) @pytest.mark.parametrize("attach", (False, True)) -@pytest.mark.parametrize("crossover", (True, False)) -def test_derivatives_analytical(pbc, attach, average, rbf, crossover): +@pytest.mark.parametrize("compression", ({"mode": "off"}, {"mode": "crossover"})) +def test_derivatives_analytical(pbc, attach, average, rbf, compression): descriptor_func = soap( r_cut=3, n_max=4, @@ -326,8 +367,8 @@ def test_derivatives_analytical(pbc, attach, average, rbf, crossover): rbf=rbf, sparse=False, average=average, - crossover=crossover, periodic=pbc, + compression=compression, dtype="float64", ) assert_derivatives(descriptor_func, "analytical", pbc, attach=attach) @@ -411,6 +452,7 @@ def get_setup(): "n_max": 5, "l_max": 5, "species": ["H", "O"], + "compression": {"mode": "off"}, } # Invalid weighting @@ -469,10 +511,21 @@ def get_setup(): == "Analytical derivatives currently not available for averaged output." ) + with pytest.raises(ValueError): + setup = get_setup() + setup["compression"]["mode"] = "mu1nu1" + soap = SOAP(**setup) + soap.derivatives(system, centers=centers, method="analytical") + with pytest.raises(ValueError): + setup["compression"]["mode"] = "mu2" + soap = SOAP(**setup) + soap.derivatives(system, centers=centers, method="analytical") + # Test that trying to get analytical derivatives with polynomial basis # raises an exception. with pytest.raises(ValueError) as excinfo: setup = get_setup() + setup["average"] = "off" setup["rbf"] = "polynomial" soap = SOAP(**setup) soap.derivatives(system, centers=centers, method="analytical") @@ -534,9 +587,9 @@ def test_infer_r_cut(weighting, expected_r_cut): assert soap._r_cut == pytest.approx(expected_r_cut, rel=1e-8, abs=0) -@pytest.mark.parametrize("crossover", (False, True)) +@pytest.mark.parametrize("compression", ({"mode": "off"}, {"mode": "crossover"})) @pytest.mark.parametrize("rbf", ("gto", "polynomial")) -def test_crossover(crossover, rbf): +def test_crossover(compression, rbf): """Tests that disabling/enabling crossover works as expected.""" species = [1, 8] n_max = 5 @@ -547,7 +600,7 @@ def test_crossover(crossover, rbf): desc = SOAP( species=species, rbf=rbf, - crossover=crossover, + compression=compression, r_cut=3, n_max=n_max, l_max=l_max, @@ -558,7 +611,7 @@ def test_crossover(crossover, rbf): for pair in itertools.combinations_with_replacement(species, 2): crossed = pair[0] != pair[1] if crossed: - if not crossover: + if compression["mode"] == "crossover": with pytest.raises(ValueError): desc.get_location(pair) else: @@ -588,6 +641,24 @@ def test_average_outer(rbf): assert np.allclose(average, assumed_average) +@pytest.mark.parametrize("rbf", ["gto", "polynomial"]) +def test_mu1nu1_compression(rbf): + """Tests the mu=1, nu=1 Darby et al. feature compression scheme + ('mu1nu1' compression). + """ + system, centers, args = globals()[f"get_soap_{rbf}_l_max_setup"]() + # Calculate the analytical power spectrum + args["compression"] = {"mode": "mu1nu1"} + soap = SOAP(**args, rbf=rbf, average="off") + analytical_inner = soap.create(system, centers=centers) + + # Calculate the numerical power spectrum + coeffs = globals()[f"load_{rbf}_coefficients"](args) + numerical_inner = get_power_spectrum(coeffs, compression={"mode": "mu1nu1"}) + + assert np.allclose(numerical_inner, analytical_inner, atol=1e-15, rtol=0.01) + + @pytest.mark.parametrize("rbf", ["gto", "polynomial"]) def test_average_inner(rbf): """Tests the inner averaging (averaging done before calculating power @@ -601,7 +672,7 @@ def test_average_inner(rbf): # Calculate the numerical power spectrum coeffs = globals()[f"load_{rbf}_coefficients"](args) numerical_inner = get_power_spectrum( - coeffs, crossover=args["crossover"], average="inner" + coeffs, compression=args["compression"], average="inner" ) # print(f"Numerical: {numerical_inner}") @@ -622,7 +693,10 @@ def test_integration(rbf): # Fetch the precalculated numerical power spectrum coeffs = globals()[f"load_{rbf}_coefficients"](args) - numerical_power_spectrum = get_power_spectrum(coeffs, crossover=args["crossover"]) + crossover = True + if args["compression"]["mode"] == "crossover": + crossover = False + numerical_power_spectrum = get_power_spectrum(coeffs, crossover=crossover) assert np.allclose( numerical_power_spectrum, analytical_power_spectrum, @@ -670,7 +744,10 @@ def test_weighting(rbf, weighting): # Load coefficients from disk coeffs = np.load(filename) - numerical_power_spectrum = get_power_spectrum(coeffs, crossover=args["crossover"]) + crossover = True + if args["compression"]["mode"] == "crossover": + crossover = False + numerical_power_spectrum = get_power_spectrum(coeffs, crossover=crossover) # print(f"Numerical: {numerical_power_spectrum}") # print(f"Analytical: {analytical_power_spectrum}") @@ -682,6 +759,30 @@ def test_weighting(rbf, weighting): ) +@pytest.mark.parametrize( + "species_weighting, species, expected_weights", + [ + ({"H": 1, "O": 2, "F": 1.2}, ["H", "O", "F"], np.array([1, 2, 1.2])), + ({"F": 1, "Zn": 2, "H": 1.2}, ["H", "Zn", "F"], np.array([1.2, 1, 2])), + ({"C": 1, "H": 2, "Li": 1.2}, ["Li", "H", "C"], np.array([2, 1.2, 1])), + (None, ["H", "O", "C"], np.ones(3)), + ], +) +def test_species_weighting(species_weighting, species, expected_weights): + """Tests that species weights can be supplied and set correctly.""" + soaper = SOAP( + r_cut=5, + n_max=3, + l_max=3, + rbf="gto", + compression={"mode": "mu1nu1", "species_weighting": species_weighting}, + average="off", + species=species, + ) + species_weights = soaper.species_weights + assert np.allclose(species_weights, expected_weights) + + def test_padding(): """Tests that the padding used in constructing extended systems is sufficient. @@ -755,7 +856,6 @@ def test_rbf_orthonormality(): n_max=n_max, sigma=sigma, r_cut=r_cut, - crossover=True, sparse=False, ) alphas = np.reshape(soap._alphas, [l_max + 1, n_max]) diff --git a/tests/testutils.py b/tests/testutils.py index bd356da2..aff4ae34 100644 --- a/tests/testutils.py +++ b/tests/testutils.py @@ -39,7 +39,7 @@ def get_soap_default_setup(): "r_cut": 2.0, "sigma": 0.55, "species": ["H", "C"], - "crossover": True, + "compression": {"mode": "off"}, } return [system, centers, soap_arguments] @@ -77,7 +77,7 @@ def get_soap_gto_l_max_setup(): "r_cut": 2.0, "sigma": 0.1, "species": ["H"], - "crossover": False, + "compression": {"mode": "crossover"}, } return (system, centers, soap_arguments) @@ -115,7 +115,7 @@ def get_soap_polynomial_l_max_setup(): "r_cut": 2.0, "sigma": 0.1, "species": ["H"], - "crossover": False, + "compression": {"mode": "crossover"}, } return (system, centers, soap_arguments)