From bb5497a302a03c2cbc24733ca02374a294f7d082 Mon Sep 17 00:00:00 2001 From: First Coder Date: Sat, 6 Mar 2021 08:14:04 -0800 Subject: [PATCH] Update dev docs --- docs/_modules/index.html | 6 +- .../analysis/diffusion/aimd/clustering.html | 4 +- .../analysis/diffusion/aimd/pathway.html | 4 +- .../pymatgen/analysis/diffusion/aimd/rdf.html | 4 +- .../diffusion/aimd/tests/test_clustering.html | 4 +- .../diffusion/aimd/tests/test_pathway.html | 6 +- .../diffusion/aimd/tests/test_rdf.html | 4 +- .../diffusion/aimd/tests/test_van_hove.html | 6 +- .../analysis/diffusion/aimd/van_hove.html | 6 +- .../pymatgen/analysis/diffusion/analyzer.html | 1028 +++++++++++++++++ .../diffusion/neb/full_path_mapper.html | 4 +- .../pymatgen/analysis/diffusion/neb/io.html | 4 +- .../analysis/diffusion/neb/pathfinder.html | 4 +- .../diffusion/neb/periodic_dijkstra.html | 4 +- .../neb/tests/test_full_path_mapper.html | 4 +- .../analysis/diffusion/neb/tests/test_io.html | 4 +- .../diffusion/neb/tests/test_pathfinder.html | 4 +- .../diffusion/tests/test_analyzer.html | 589 ++++++++++ .../diffusion/utils/parse_entries.html | 4 +- .../analysis/diffusion/utils/supercells.html | 4 +- .../utils/tests/test_parse_entries.html | 4 +- ...matgen.analysis.diffusion.analyzer.rst.txt | 7 + .../pymatgen.analysis.diffusion.rst.txt | 8 + ...ysis.diffusion.tests.test_analyzer.rst.txt | 7 + docs/_static/documentation_options.js | 2 +- docs/_themes/README.html | 4 +- docs/change_log.html | 4 +- docs/doctrees/environment.pickle | Bin 324234 -> 391969 bytes ...n.analysis.diffusion.aimd.van_hove.doctree | Bin 105618 -> 105618 bytes ...matgen.analysis.diffusion.analyzer.doctree | Bin 0 -> 152287 bytes .../pymatgen.analysis.diffusion.doctree | Bin 4022 -> 4460 bytes ...ysis.diffusion.tests.test_analyzer.doctree | Bin 0 -> 14980 bytes docs/genindex.html | 80 +- docs/index.html | 4 +- docs/modules.html | 4 +- docs/objects.inv | Bin 2639 -> 2890 bytes docs/py-modindex.html | 14 +- ...en.analysis.diffusion.aimd.clustering.html | 4 +- docs/pymatgen.analysis.diffusion.aimd.html | 4 +- ...atgen.analysis.diffusion.aimd.pathway.html | 8 +- .../pymatgen.analysis.diffusion.aimd.rdf.html | 4 +- ....diffusion.aimd.tests.test_clustering.html | 4 +- ...sis.diffusion.aimd.tests.test_pathway.html | 4 +- ...nalysis.diffusion.aimd.tests.test_rdf.html | 4 +- ...is.diffusion.aimd.tests.test_van_hove.html | 4 +- ...tgen.analysis.diffusion.aimd.van_hove.html | 8 +- .../pymatgen.analysis.diffusion.analyzer.html | 520 +++++++++ docs/pymatgen.analysis.diffusion.html | 13 +- ...alysis.diffusion.neb.full_path_mapper.html | 4 +- docs/pymatgen.analysis.diffusion.neb.html | 4 +- docs/pymatgen.analysis.diffusion.neb.io.html | 4 +- ...gen.analysis.diffusion.neb.pathfinder.html | 4 +- ...lysis.diffusion.neb.periodic_dijkstra.html | 4 +- ...usion.neb.tests.test_full_path_mapper.html | 4 +- ....analysis.diffusion.neb.tests.test_io.html | 4 +- ...s.diffusion.neb.tests.test_pathfinder.html | 4 +- ...nalysis.diffusion.tests.test_analyzer.html | 147 +++ docs/pymatgen.analysis.diffusion.utils.html | 4 +- ...atgen.analysis.diffusion.utils.maggma.html | 4 +- ...nalysis.diffusion.utils.parse_entries.html | 4 +- ...n.analysis.diffusion.utils.supercells.html | 4 +- ...fusion.utils.tests.test_parse_entries.html | 4 +- docs/pymatgen.analysis.html | 8 +- docs/pymatgen.html | 4 +- docs/pymatgen_diffusion.aimd.html | 4 +- docs/pymatgen_diffusion.html | 4 +- docs/pymatgen_diffusion.neb.html | 4 +- docs/search.html | 4 +- docs/searchindex.js | 2 +- docs_rst/pymatgen.analysis.diffusion.rst | 8 + pymatgen/analysis/diffusion/__init__.py | 2 +- setup.py | 4 +- 72 files changed, 2530 insertions(+), 125 deletions(-) create mode 100644 docs/_modules/pymatgen/analysis/diffusion/analyzer.html create mode 100644 docs/_modules/pymatgen/analysis/diffusion/tests/test_analyzer.html create mode 100644 docs/_sources/pymatgen.analysis.diffusion.analyzer.rst.txt create mode 100644 docs/_sources/pymatgen.analysis.diffusion.tests.test_analyzer.rst.txt create mode 100644 docs/doctrees/pymatgen.analysis.diffusion.analyzer.doctree create mode 100644 docs/doctrees/pymatgen.analysis.diffusion.tests.test_analyzer.doctree create mode 100644 docs/pymatgen.analysis.diffusion.analyzer.html create mode 100644 docs/pymatgen.analysis.diffusion.tests.test_analyzer.html diff --git a/docs/_modules/index.html b/docs/_modules/index.html index 784ccd4f..b180c5aa 100644 --- a/docs/_modules/index.html +++ b/docs/_modules/index.html @@ -5,7 +5,7 @@ - Overview: module code — pymatgen-diffusion 2021.3.5 documentation + Overview: module code — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

Navigation

  • modules |
  • - + @@ -55,6 +55,7 @@

    All modules for which code is available

  • pymatgen.analysis.diffusion.aimd.tests.test_rdf
  • pymatgen.analysis.diffusion.aimd.tests.test_van_hove
  • pymatgen.analysis.diffusion.aimd.van_hove
  • +
  • pymatgen.analysis.diffusion.analyzer
  • pymatgen.analysis.diffusion.neb.full_path_mapper
  • pymatgen.analysis.diffusion.neb.io
  • pymatgen.analysis.diffusion.neb.pathfinder
  • @@ -62,6 +63,7 @@

    All modules for which code is available

  • pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper
  • pymatgen.analysis.diffusion.neb.tests.test_io
  • pymatgen.analysis.diffusion.neb.tests.test_pathfinder
  • +
  • pymatgen.analysis.diffusion.tests.test_analyzer
  • pymatgen.analysis.diffusion.utils.parse_entries
  • pymatgen.analysis.diffusion.utils.supercells
  • pymatgen.analysis.diffusion.utils.tests.test_parse_entries
  • diff --git a/docs/_modules/pymatgen/analysis/diffusion/aimd/clustering.html b/docs/_modules/pymatgen/analysis/diffusion/aimd/clustering.html index 63e81d57..99129415 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/aimd/clustering.html +++ b/docs/_modules/pymatgen/analysis/diffusion/aimd/clustering.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.clustering — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.clustering — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/aimd/pathway.html b/docs/_modules/pymatgen/analysis/diffusion/aimd/pathway.html index 73d2111f..f03d6094 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/aimd/pathway.html +++ b/docs/_modules/pymatgen/analysis/diffusion/aimd/pathway.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.pathway — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.pathway — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/aimd/rdf.html b/docs/_modules/pymatgen/analysis/diffusion/aimd/rdf.html index 59fa6cc3..27c7670b 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/aimd/rdf.html +++ b/docs/_modules/pymatgen/analysis/diffusion/aimd/rdf.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.rdf — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.rdf — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_clustering.html b/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_clustering.html index 7f6718ae..d28fda2e 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_clustering.html +++ b/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_clustering.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.tests.test_clustering — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.tests.test_clustering — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_pathway.html b/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_pathway.html index c620b59c..2212a9ab 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_pathway.html +++ b/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_pathway.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.tests.test_pathway — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.tests.test_pathway — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + @@ -64,7 +64,7 @@

    Source code for pymatgen.analysis.diffusion.aimd.tests.test_pathway

    ProbabilityDensityAnalysis, SiteOccupancyAnalyzer, ) -from pymatgen.analysis.diffusion_analyzer import DiffusionAnalyzer +from pymatgen.analysis.diffusion.analyzer import DiffusionAnalyzer from pymatgen.core import Structure tests_dir = os.path.dirname(os.path.abspath(__file__)) diff --git a/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_rdf.html b/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_rdf.html index 27764f9f..58be5054 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_rdf.html +++ b/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_rdf.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.tests.test_rdf — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.tests.test_rdf — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_van_hove.html b/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_van_hove.html index 11a9472a..28bcda08 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_van_hove.html +++ b/docs/_modules/pymatgen/analysis/diffusion/aimd/tests/test_van_hove.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.tests.test_van_hove — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.tests.test_van_hove — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + @@ -64,7 +64,7 @@

    Source code for pymatgen.analysis.diffusion.aimd.tests.test_van_hove

    from copy import deepcopy from monty.serialization import loadfn -from pymatgen.analysis.diffusion_analyzer import DiffusionAnalyzer +from pymatgen.analysis.diffusion.analyzer import DiffusionAnalyzer from pymatgen.analysis.diffusion.aimd.van_hove import ( VanHoveAnalysis, RadialDistributionFunction, diff --git a/docs/_modules/pymatgen/analysis/diffusion/aimd/van_hove.html b/docs/_modules/pymatgen/analysis/diffusion/aimd/van_hove.html index 88eac0af..5997e1ea 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/aimd/van_hove.html +++ b/docs/_modules/pymatgen/analysis/diffusion/aimd/van_hove.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.van_hove — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.van_hove — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + @@ -65,7 +65,7 @@

    Source code for pymatgen.analysis.diffusion.aimd.van_hove

    import pandas as pds from scipy.stats import norm from pymatgen.core import Structure -from pymatgen.analysis.diffusion_analyzer import DiffusionAnalyzer +from pymatgen.analysis.diffusion.analyzer import DiffusionAnalyzer from pymatgen.util.plotting import pretty_plot from pymatgen.util.typing import ArrayLike diff --git a/docs/_modules/pymatgen/analysis/diffusion/analyzer.html b/docs/_modules/pymatgen/analysis/diffusion/analyzer.html new file mode 100644 index 00000000..9517dab0 --- /dev/null +++ b/docs/_modules/pymatgen/analysis/diffusion/analyzer.html @@ -0,0 +1,1028 @@ + + + + + + + + pymatgen.analysis.diffusion.analyzer — pymatgen-diffusion 2021.3.6 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Source code for pymatgen.analysis.diffusion.analyzer

    +# coding: utf-8
    +# Copyright (c) Pymatgen Development Team.
    +# Distributed under the terms of the MIT License.
    +
    +"""
    +A module to perform diffusion analyses (e.g. calculating diffusivity from
    +mean square displacements etc.). If you use this module, please consider
    +citing the following papers::
    +
    +    Ong, S. P., Mo, Y., Richards, W. D., Miara, L., Lee, H. S., & Ceder, G.
    +    (2013). Phase stability, electrochemical stability and ionic conductivity
    +    of the Li10+-1MP2X12 (M = Ge, Si, Sn, Al or P, and X = O, S or Se) family
    +    of superionic conductors. Energy & Environmental Science, 6(1), 148.
    +    doi:10.1039/c2ee23355j
    +
    +    Mo, Y., Ong, S. P., & Ceder, G. (2012). First Principles Study of the
    +    Li10GeP2S12 Lithium Super Ionic Conductor Material. Chemistry of Materials,
    +    24(1), 15-17. doi:10.1021/cm203303y
    +"""
    +
    +
    +import multiprocessing
    +import warnings
    +
    +import numpy as np
    +import scipy.constants as const
    +from monty.json import MSONable
    +
    +from pymatgen.analysis.structure_matcher import (
    +    OrderDisorderElementComparator,
    +    StructureMatcher,
    +)
    +from pymatgen.core.periodic_table import get_el_sp
    +from pymatgen.core.structure import Structure
    +from pymatgen.io.vasp.outputs import Vasprun
    +from pymatgen.util.coord import pbc_diff
    +
    +__author__ = "Will Richards, Shyue Ping Ong"
    +__version__ = "0.2"
    +__maintainer__ = "Will Richards"
    +__email__ = "wrichard@mit.edu"
    +__status__ = "Beta"
    +__date__ = "5/2/13"
    +
    +
    +
    [docs]class DiffusionAnalyzer(MSONable): + """ + Class for performing diffusion analysis. + + .. attribute: diffusivity + + Diffusivity in cm^2 / s + + .. attribute: chg_diffusivity + + Charge diffusivity in cm^2 / s + + .. attribute: conductivity + + Conductivity in mS / cm + + .. attribute: chg_conductivity + + Conductivity derived from Nernst-Einstein equation using charge + diffusivity, in mS / cm + + .. attribute: diffusivity_components + + A vector with diffusivity in the a, b and c directions in cm^2 / s + + .. attribute: conductivity_components + + A vector with conductivity in the a, b and c directions in mS / cm + + .. attribute: diffusivity_std_dev + + Std dev in diffusivity in cm^2 / s. Note that this makes sense only + for non-smoothed analyses. + + .. attribute: chg_diffusivity_std_dev + + Std dev in charge diffusivity in cm^2 / s. Note that this makes sense only + for non-smoothed analyses. + + .. attribute: conductivity_std_dev + + Std dev in conductivity in mS / cm. Note that this makes sense only + for non-smoothed analyses. + + .. attribute: diffusivity_components_std_dev + + A vector with std dev. in diffusivity in the a, b and c directions in + cm^2 / cm. Note that this makes sense only for non-smoothed analyses. + + .. attribute: conductivity_components_std_dev + + A vector with std dev. in conductivity in the a, b and c directions + in mS / cm. Note that this makes sense only for non-smoothed analyses. + + .. attribute: max_framework_displacement + + The maximum (drift adjusted) distance of any framework atom from its + starting location in A. + + .. attribute: max_ion_displacements + + nions x 1 array of the maximum displacement of each individual ion. + + .. attribute: msd + + nsteps x 1 array of the mean square displacement of specie. + + .. attribute: mscd + + nsteps x 1 array of the mean square charge displacement of specie. + + .. attribute: msd_components + + nsteps x 3 array of the MSD in each lattice direction of specie. + + .. attribute: sq_disp_ions + + The square displacement of all ion (both specie and other ions) as a + nions x nsteps array. + + .. attribute: dt + + Time coordinate array. + + .. attribute: haven_ratio + Haven ratio defined as diffusivity / chg_diffusivity. + """ + + def __init__( + self, + structure, + displacements, + specie, + temperature, + time_step, + step_skip, + smoothed="max", + min_obs=30, + avg_nsteps=1000, + lattices=None, + ): + """ + This constructor is meant to be used with pre-processed data. + Other convenient constructors are provided as class methods (see + from_vaspruns and from_files). + + Given a matrix of displacements (see arguments below for expected + format), the diffusivity is given by:: + + D = 1 / 2dt * <mean square displacement> + + where d is the dimensionality, t is the time. To obtain a reliable + diffusion estimate, a least squares regression of the MSD against + time to obtain the slope, which is then related to the diffusivity. + + For traditional analysis, use smoothed=False and weighted=False. + + Args: + structure (Structure): Initial structure. + displacements (array): Numpy array of with shape [site, + time step, axis] + specie (Element/Species): Species to calculate diffusivity for as a + String. E.g., "Li". + temperature (float): Temperature of the diffusion run in Kelvin. + time_step (int): Time step between measurements. + step_skip (int): Sampling frequency of the displacements ( + time_step is multiplied by this number to get the real time + between measurements) + smoothed (str): Whether to smooth the MSD, and what mode to smooth. + Supported modes are: + + i. "max", which tries to use the maximum # + of data points for each time origin, subject to a + minimum # of observations given by min_obs, and then + weights the observations based on the variance + accordingly. This is the default. + ii. "constant", in which each timestep is averaged over + the number of time_steps given by min_steps. + iii. None / False / any other false-like quantity. No + smoothing. + + min_obs (int): Used with smoothed="max". Minimum number of + observations to have before including in the MSD vs dt + calculation. E.g. If a structure has 10 diffusing atoms, + and min_obs = 30, the MSD vs dt will be + calculated up to dt = total_run_time / 3, so that each + diffusing atom is measured at least 3 uncorrelated times. + Only applies in smoothed="max". + avg_nsteps (int): Used with smoothed="constant". Determines the + number of time steps to average over to get the msd for each + timestep. Default of 1000 is usually pretty good. + lattices (array): Numpy array of lattice matrix of every step. Used + for NPT-AIMD. For NVT-AIMD, the lattice at each time step is + set to the lattice in the "structure" argument. + """ + self.structure = structure + self.disp = displacements + self.specie = specie + self.temperature = temperature + self.time_step = time_step + self.step_skip = step_skip + self.min_obs = min_obs + self.smoothed = smoothed + self.avg_nsteps = avg_nsteps + self.lattices = lattices + + if lattices is None: + self.lattices = np.array([structure.lattice.matrix.tolist()]) + + indices = [] + framework_indices = [] + for i, site in enumerate(structure): + if site.specie.symbol == specie: + indices.append(i) + else: + framework_indices.append(i) + if self.disp.shape[1] < 2: + self.diffusivity = 0.0 + self.conductivity = 0.0 + self.diffusivity_components = np.array([0.0, 0.0, 0.0]) + self.conductivity_components = np.array([0.0, 0.0, 0.0]) + self.max_framework_displacement = 0 + else: + framework_disp = self.disp[framework_indices] + drift = np.average(framework_disp, axis=0)[None, :, :] + + # drift corrected position + dc = self.disp - drift + + nions, nsteps, dim = dc.shape + + if not smoothed: + timesteps = np.arange(0, nsteps) + elif smoothed == "constant": + if nsteps <= avg_nsteps: + raise ValueError("Not enough data to calculate diffusivity") + timesteps = np.arange(0, nsteps - avg_nsteps) + else: + # limit the number of sampled timesteps to 200 + min_dt = int(1000 / (self.step_skip * self.time_step)) + max_dt = min(len(indices) * nsteps // self.min_obs, nsteps) + if min_dt >= max_dt: + raise ValueError("Not enough data to calculate diffusivity") + timesteps = np.arange(min_dt, max_dt, max(int((max_dt - min_dt) / 200), 1)) + + dt = timesteps * self.time_step * self.step_skip + + # calculate the smoothed msd values + msd = np.zeros_like(dt, dtype=np.double) + sq_disp_ions = np.zeros((len(dc), len(dt)), dtype=np.double) + msd_components = np.zeros(dt.shape + (3,)) + + # calculate mean square charge displacement + mscd = np.zeros_like(msd, dtype=np.double) + + for i, n in enumerate(timesteps): + if not smoothed: + dx = dc[:, i : i + 1, :] + dcomponents = dc[:, i : i + 1, :] + elif smoothed == "constant": + dx = dc[:, i : i + avg_nsteps, :] - dc[:, 0:avg_nsteps, :] + dcomponents = dc[:, i : i + avg_nsteps, :] - dc[:, 0:avg_nsteps, :] + else: + dx = dc[:, n:, :] - dc[:, :-n, :] + dcomponents = dc[:, n:, :] - dc[:, :-n, :] + + # Get msd + sq_disp = dx ** 2 + sq_disp_ions[:, i] = np.average(np.sum(sq_disp, axis=2), axis=1) + msd[i] = np.average(sq_disp_ions[:, i][indices]) + + msd_components[i] = np.average(dcomponents[indices] ** 2, axis=(0, 1)) + + # Get mscd + sq_chg_disp = np.sum(dx[indices, :, :], axis=0) ** 2 + mscd[i] = np.average(np.sum(sq_chg_disp, axis=1), axis=0) / len(indices) + + def weighted_lstsq(a, b): + if smoothed == "max": + # For max smoothing, we need to weight by variance. + w_root = (1 / dt) ** 0.5 + return np.linalg.lstsq(a * w_root[:, None], b * w_root, rcond=None) + return np.linalg.lstsq(a, b, rcond=None) + + # Get self diffusivity + m_components = np.zeros(3) + m_components_res = np.zeros(3) + a = np.ones((len(dt), 2)) + a[:, 0] = dt + for i in range(3): + (m, c), res, rank, s = weighted_lstsq(a, msd_components[:, i]) + m_components[i] = max(m, 1e-15) + m_components_res[i] = res[0] + + (m, c), res, rank, s = weighted_lstsq(a, msd) + # m shouldn't be negative + m = max(m, 1e-15) + + # Get also the charge diffusivity + (m_chg, c_chg), res_chg, _, _ = weighted_lstsq(a, mscd) + # m shouldn't be negative + m_chg = max(m_chg, 1e-15) + + # factor of 10 is to convert from A^2/fs to cm^2/s + # factor of 6 is for dimensionality + conv_factor = get_conversion_factor(self.structure, self.specie, self.temperature) + self.diffusivity = m / 60 + self.chg_diffusivity = m_chg / 60 + + # Calculate the error in the diffusivity using the error in the + # slope from the lst sq. + # Variance in slope = n * Sum Squared Residuals / (n * Sxx - Sx + # ** 2) / (n-2). + n = len(dt) + + # Pre-compute the denominator since we will use it later. + # We divide dt by 1000 to avoid overflow errors in some systems ( + # e.g., win). This is subsequently corrected where denom is used. + denom = (n * np.sum((dt / 1000) ** 2) - np.sum(dt / 1000) ** 2) * (n - 2) + self.diffusivity_std_dev = np.sqrt(n * res[0] / denom) / 60 / 1000 + self.chg_diffusivity_std_dev = np.sqrt(n * res_chg[0] / denom) / 60 / 1000 + self.conductivity = self.diffusivity * conv_factor + self.chg_conductivity = self.chg_diffusivity * conv_factor + self.conductivity_std_dev = self.diffusivity_std_dev * conv_factor + + self.diffusivity_components = m_components / 20 + self.diffusivity_components_std_dev = np.sqrt(n * m_components_res / denom) / 20 / 1000 + self.conductivity_components = self.diffusivity_components * conv_factor + self.conductivity_components_std_dev = self.diffusivity_components_std_dev * conv_factor + + # Drift and displacement information. + self.drift = drift + self.corrected_displacements = dc + self.max_ion_displacements = np.max(np.sum(dc ** 2, axis=-1) ** 0.5, axis=1) + self.max_framework_displacement = np.max(self.max_ion_displacements[framework_indices]) + self.msd = msd + self.mscd = mscd + self.haven_ratio = self.diffusivity / self.chg_diffusivity + self.sq_disp_ions = sq_disp_ions + self.msd_components = msd_components + self.dt = dt + self.indices = indices + self.framework_indices = framework_indices + +
    [docs] def get_drift_corrected_structures(self, start=None, stop=None, step=None): + """ + Returns an iterator for the drift-corrected structures. Use of + iterator is to reduce memory usage as # of structures in MD can be + huge. You don't often need all the structures all at once. + + Args: + start, stop, step (int): applies a start/stop/step to the iterator. + Faster than applying it after generation, as it reduces the + number of structures created. + """ + coords = np.array(self.structure.cart_coords) + species = self.structure.species_and_occu + lattices = self.lattices + nsites, nsteps, dim = self.corrected_displacements.shape + + for i in range(start or 0, stop or nsteps, step or 1): + latt = lattices[0] if len(lattices) == 1 else lattices[i] + yield Structure( + latt, + species, + coords + self.corrected_displacements[:, i, :], + coords_are_cartesian=True, + )
    + +
    [docs] def get_summary_dict(self, include_msd_t=False, include_mscd_t=False): + """ + Provides a summary of diffusion information. + + Args: + include_msd_t (bool): Whether to include mean square displace and + time data with the data. + include_msd_t (bool): Whether to include mean square charge displace and + time data with the data. + + Returns: + (dict) of diffusion and conductivity data. + """ + d = { + "D": self.diffusivity, + "D_sigma": self.diffusivity_std_dev, + "D_charge": self.chg_diffusivity, + "D_charge_sigma": self.chg_diffusivity_std_dev, + "S": self.conductivity, + "S_sigma": self.conductivity_std_dev, + "S_charge": self.chg_conductivity, + "D_components": self.diffusivity_components.tolist(), + "S_components": self.conductivity_components.tolist(), + "D_components_sigma": self.diffusivity_components_std_dev.tolist(), + "S_components_sigma": self.conductivity_components_std_dev.tolist(), + "specie": str(self.specie), + "step_skip": self.step_skip, + "time_step": self.time_step, + "temperature": self.temperature, + "max_framework_displacement": self.max_framework_displacement, + "Haven_ratio": self.haven_ratio, + } + if include_msd_t: + d["msd"] = self.msd.tolist() + d["msd_components"] = self.msd_components.tolist() + d["dt"] = self.dt.tolist() + if include_mscd_t: + d["mscd"] = self.mscd.tolist() + return d
    + +
    [docs] def get_framework_rms_plot(self, plt=None, granularity=200, matching_s=None): + """ + Get the plot of rms framework displacement vs time. Useful for checking + for melting, especially if framework atoms can move via paddle-wheel + or similar mechanism (which would show up in max framework displacement + but doesn't constitute melting). + + Args: + plt (matplotlib.pyplot): If plt is supplied, changes will be made + to an existing plot. Otherwise, a new plot will be created. + granularity (int): Number of structures to match + matching_s (Structure): Optionally match to a disordered structure + instead of the first structure in the analyzer. Required when + a secondary mobile ion is present. + Notes: + The method doesn't apply to NPT-AIMD simulation analysis. + """ + from pymatgen.util.plotting import pretty_plot + + if self.lattices is not None and len(self.lattices) > 1: + warnings.warn("Note the method doesn't apply to NPT-AIMD " "simulation analysis!") + + plt = pretty_plot(12, 8, plt=plt) + step = (self.corrected_displacements.shape[1] - 1) // (granularity - 1) + f = (matching_s or self.structure).copy() + f.remove_species([self.specie]) + sm = StructureMatcher( + primitive_cell=False, + stol=0.6, + comparator=OrderDisorderElementComparator(), + allow_subset=True, + ) + rms = [] + for s in self.get_drift_corrected_structures(step=step): + s.remove_species([self.specie]) + d = sm.get_rms_dist(f, s) + if d: + rms.append(d) + else: + rms.append((1, 1)) + max_dt = (len(rms) - 1) * step * self.step_skip * self.time_step + if max_dt > 100000: + plot_dt = np.linspace(0, max_dt / 1000, len(rms)) + unit = "ps" + else: + plot_dt = np.linspace(0, max_dt, len(rms)) + unit = "fs" + rms = np.array(rms) + plt.plot(plot_dt, rms[:, 0], label="RMS") + plt.plot(plot_dt, rms[:, 1], label="max") + plt.legend(loc="best") + plt.xlabel("Timestep ({})".format(unit)) + plt.ylabel("normalized distance") + plt.tight_layout() + return plt
    + +
    [docs] def get_msd_plot(self, plt=None, mode="specie"): + """ + Get the plot of the smoothed msd vs time graph. Useful for + checking convergence. This can be written to an image file. + + Args: + plt: A plot object. Defaults to None, which means one will be + generated. + mode (str): Determines type of msd plot. By "species", "sites", + or direction (default). If mode = "mscd", the smoothed mscd vs. + time will be plotted. + """ + from pymatgen.util.plotting import pretty_plot + + plt = pretty_plot(12, 8, plt=plt) + if np.max(self.dt) > 100000: + plot_dt = self.dt / 1000 + unit = "ps" + else: + plot_dt = self.dt + unit = "fs" + + if mode == "species": + for sp in sorted(self.structure.composition.keys()): + indices = [i for i, site in enumerate(self.structure) if site.specie == sp] + sd = np.average(self.sq_disp_ions[indices, :], axis=0) + plt.plot(plot_dt, sd, label=sp.__str__()) + plt.legend(loc=2, prop={"size": 20}) + elif mode == "sites": + for i, site in enumerate(self.structure): + sd = self.sq_disp_ions[i, :] + plt.plot(plot_dt, sd, label="%s - %d" % (site.specie.__str__(), i)) + plt.legend(loc=2, prop={"size": 20}) + elif mode == "mscd": + plt.plot(plot_dt, self.mscd, "r") + plt.legend(["Overall"], loc=2, prop={"size": 20}) + else: + # Handle default / invalid mode case + plt.plot(plot_dt, self.msd, "k") + plt.plot(plot_dt, self.msd_components[:, 0], "r") + plt.plot(plot_dt, self.msd_components[:, 1], "g") + plt.plot(plot_dt, self.msd_components[:, 2], "b") + plt.legend(["Overall", "a", "b", "c"], loc=2, prop={"size": 20}) + + plt.xlabel("Timestep ({})".format(unit)) + if mode == "mscd": + plt.ylabel("MSCD ($\\AA^2$)") + else: + plt.ylabel("MSD ($\\AA^2$)") + plt.tight_layout() + return plt
    + +
    [docs] def plot_msd(self, mode="default"): + """ + Plot the smoothed msd vs time graph. Useful for checking convergence. + + Args: + mode (str): Can be "default" (the default, shows only the MSD for + the diffusing specie, and its components), "ions" (individual + square displacements of all ions), "species" (mean square + displacement by specie), or "mscd" (overall mean square charge + displacement for diffusing specie). + """ + self.get_msd_plot(mode=mode).show()
    + +
    [docs] def export_msdt(self, filename): + """ + Writes MSD data to a csv file that can be easily plotted in other + software. + + Args: + filename (str): Filename. Supported formats are csv and dat. If + the extension is csv, a csv file is written. Otherwise, + a dat format is assumed. + """ + fmt = "csv" if filename.lower().endswith(".csv") else "dat" + delimiter = ", " if fmt == "csv" else " " + with open(filename, "wt") as f: + if fmt == "dat": + f.write("# ") + f.write(delimiter.join(["t", "MSD", "MSD_a", "MSD_b", "MSD_c", "MSCD"])) + f.write("\n") + for dt, msd, msdc, mscd in zip(self.dt, self.msd, self.msd_components, self.mscd): + f.write(delimiter.join(["%s" % v for v in [dt, msd] + list(msdc) + [mscd]])) + f.write("\n")
    + +
    [docs] @classmethod + def from_structures( + cls, structures, specie, temperature, time_step, step_skip, initial_disp=None, initial_structure=None, **kwargs + ): + r""" + Convenient constructor that takes in a list of Structure objects to + perform diffusion analysis. + + Args: + structures ([Structure]): list of Structure objects (must be + ordered in sequence of run). E.g., you may have performed + sequential VASP runs to obtain sufficient statistics. + specie (Element/Species): Species to calculate diffusivity for as a + String. E.g., "Li". + temperature (float): Temperature of the diffusion run in Kelvin. + time_step (int): Time step between measurements. + step_skip (int): Sampling frequency of the displacements ( + time_step is multiplied by this number to get the real time + between measurements) + initial_disp (np.ndarray): Sometimes, you need to iteratively + compute estimates of the diffusivity. This supplies an + initial displacement that will be added on to the initial + displacements. Note that this makes sense only when + smoothed=False. + initial_structure (Structure): Like initial_disp, this is used + for iterative computations of estimates of the diffusivity. You + typically need to supply both variables. This stipulates the + initial structure from which the current set of displacements + are computed. + \\*\\*kwargs: kwargs supported by the :class:`DiffusionAnalyzer`_. + Examples include smoothed, min_obs, avg_nsteps. + """ + p, l = [], [] + for i, s in enumerate(structures): + if i == 0: + structure = s + p.append(np.array(s.frac_coords)[:, None]) + l.append(s.lattice.matrix) + if initial_structure is not None: + p.insert(0, np.array(initial_structure.frac_coords)[:, None]) + l.insert(0, initial_structure.lattice.matrix) + else: + p.insert(0, p[0]) + l.insert(0, l[0]) + + p = np.concatenate(p, axis=1) + dp = p[:, 1:] - p[:, :-1] + dp = dp - np.round(dp) + f_disp = np.cumsum(dp, axis=1) + c_disp = [] + for i in f_disp: + c_disp.append([np.dot(d, m) for d, m in zip(i, l[1:])]) + disp = np.array(c_disp) + + # If is NVT-AIMD, clear lattice data. + if np.array_equal(l[0], l[-1]): + l = np.array([l[0]]) + else: + l = np.array(l) + if initial_disp is not None: + disp += initial_disp[:, None, :] + + return cls(structure, disp, specie, temperature, time_step, step_skip=step_skip, lattices=l, **kwargs)
    + +
    [docs] @classmethod + def from_vaspruns(cls, vaspruns, specie, initial_disp=None, initial_structure=None, **kwargs): + r""" + Convenient constructor that takes in a list of Vasprun objects to + perform diffusion analysis. + + Args: + vaspruns ([Vasprun]): List of Vaspruns (must be ordered in + sequence of MD simulation). E.g., you may have performed + sequential VASP runs to obtain sufficient statistics. + specie (Element/Species): Species to calculate diffusivity for as a + String. E.g., "Li". + initial_disp (np.ndarray): Sometimes, you need to iteratively + compute estimates of the diffusivity. This supplies an + initial displacement that will be added on to the initial + displacements. Note that this makes sense only when + smoothed=False. + initial_structure (Structure): Like initial_disp, this is used + for iterative computations of estimates of the diffusivity. You + typically need to supply both variables. This stipulates the + initial stricture from which the current set of displacements + are computed. + \\*\\*kwargs: kwargs supported by the :class:`DiffusionAnalyzer`_. + Examples include smoothed, min_obs, avg_nsteps. + """ + + def get_structures(vaspruns): + for i, vr in enumerate(vaspruns): + if i == 0: + step_skip = vr.ionic_step_skip or 1 + final_structure = vr.initial_structure + temperature = vr.parameters["TEEND"] + time_step = vr.parameters["POTIM"] + yield step_skip, temperature, time_step + # check that the runs are continuous + fdist = pbc_diff(vr.initial_structure.frac_coords, final_structure.frac_coords) + if np.any(fdist > 0.001): + raise ValueError("initial and final structures do not " "match.") + final_structure = vr.final_structure + + assert (vr.ionic_step_skip or 1) == step_skip + for s in vr.ionic_steps: + yield s["structure"] + + s = get_structures(vaspruns) + step_skip, temperature, time_step = next(s) + + return cls.from_structures( + structures=list(s), + specie=specie, + temperature=temperature, + time_step=time_step, + step_skip=step_skip, + initial_disp=initial_disp, + initial_structure=initial_structure, + **kwargs, + )
    + +
    [docs] @classmethod + def from_files( + cls, filepaths, specie, step_skip=10, ncores=None, initial_disp=None, initial_structure=None, **kwargs + ): + r""" + Convenient constructor that takes in a list of vasprun.xml paths to + perform diffusion analysis. + + Args: + filepaths ([str]): List of paths to vasprun.xml files of runs. ( + must be ordered in sequence of MD simulation). For example, + you may have done sequential VASP runs and they are in run1, + run2, run3, etc. You should then pass in + ["run1/vasprun.xml", "run2/vasprun.xml", ...]. + specie (Element/Species): Species to calculate diffusivity for as a + String. E.g., "Li". + step_skip (int): Sampling frequency of the displacements ( + time_step is multiplied by this number to get the real time + between measurements) + ncores (int): Numbers of cores to use for multiprocessing. Can + speed up vasprun parsing considerably. Defaults to None, + which means serial. It should be noted that if you want to + use multiprocessing, the number of ionic steps in all vasprun + .xml files should be a multiple of the ionic_step_skip. + Otherwise, inconsistent results may arise. Serial mode has no + such restrictions. + initial_disp (np.ndarray): Sometimes, you need to iteratively + compute estimates of the diffusivity. This supplies an + initial displacement that will be added on to the initial + displacements. Note that this makes sense only when + smoothed=False. + initial_structure (Structure): Like initial_disp, this is used + for iterative computations of estimates of the diffusivity. You + typically need to supply both variables. This stipulates the + initial structure from which the current set of displacements + are computed. + \\*\\*kwargs: kwargs supported by the :class:`DiffusionAnalyzer`_. + Examples include smoothed, min_obs, avg_nsteps. + """ + if ncores is not None and len(filepaths) > 1: + p = multiprocessing.Pool(ncores) + vaspruns = p.imap(_get_vasprun, [(fp, step_skip) for fp in filepaths]) + analyzer = cls.from_vaspruns( + vaspruns, specie=specie, initial_disp=initial_disp, initial_structure=initial_structure, **kwargs + ) + p.close() + p.join() + return analyzer + + def vr(filepaths): + offset = 0 + for p in filepaths: + v = Vasprun(p, ionic_step_offset=offset, ionic_step_skip=step_skip) + yield v + # Recompute offset. + offset = (-(v.nionic_steps - offset)) % step_skip + + return cls.from_vaspruns( + vr(filepaths), specie=specie, initial_disp=initial_disp, initial_structure=initial_structure, **kwargs + )
    + +
    [docs] def as_dict(self): + """ + Returns: MSONable dict + """ + return { + "@module": self.__class__.__module__, + "@class": self.__class__.__name__, + "structure": self.structure.as_dict(), + "displacements": self.disp.tolist(), + "specie": self.specie, + "temperature": self.temperature, + "time_step": self.time_step, + "step_skip": self.step_skip, + "min_obs": self.min_obs, + "smoothed": self.smoothed, + "avg_nsteps": self.avg_nsteps, + "lattices": self.lattices.tolist(), + }
    + +
    [docs] @classmethod + def from_dict(cls, d): + """ + Args: + d (dict): Dict representation + + Returns: DiffusionAnalyzer + """ + structure = Structure.from_dict(d["structure"]) + return cls( + structure, + np.array(d["displacements"]), + specie=d["specie"], + temperature=d["temperature"], + time_step=d["time_step"], + step_skip=d["step_skip"], + min_obs=d["min_obs"], + smoothed=d.get("smoothed", "max"), + avg_nsteps=d.get("avg_nsteps", 1000), + lattices=np.array(d.get("lattices", [d["structure"]["lattice"]["matrix"]])), + )
    + + +
    [docs]def get_conversion_factor(structure, species, temperature): + """ + Conversion factor to convert between cm^2/s diffusivity measurements and + mS/cm conductivity measurements based on number of atoms of diffusing + species. Note that the charge is based on the oxidation state of the + species (where available), or else the number of valence electrons + (usually a good guess, esp for main group ions). + + Args: + structure (Structure): Input structure. + species (Element/Species): Diffusing species. + temperature (float): Temperature of the diffusion run in Kelvin. + + Returns: + Conversion factor. + Conductivity (in mS/cm) = Conversion Factor * Diffusivity (in cm^2/s) + """ + df_sp = get_el_sp(species) + if hasattr(df_sp, "oxi_state"): + z = df_sp.oxi_state + else: + z = df_sp.full_electronic_structure[-1][2] + + n = structure.composition[species] + + vol = structure.volume * 1e-24 # units cm^3 + return 1000 * n / (vol * const.N_A) * z ** 2 * (const.N_A * const.e) ** 2 / (const.R * temperature)
    + + +def _get_vasprun(args): + """ + Internal method to support multiprocessing. + """ + return Vasprun(args[0], ionic_step_skip=args[1], parse_dos=False, parse_eigen=False) + + +
    [docs]def fit_arrhenius(temps, diffusivities): + """ + Returns Ea, c, standard error of Ea from the Arrhenius fit: + D = c * exp(-Ea/kT) + + Args: + temps ([float]): A sequence of temperatures. units: K + diffusivities ([float]): A sequence of diffusivities (e.g., + from DiffusionAnalyzer.diffusivity). units: cm^2/s + """ + t_1 = 1 / np.array(temps) + logd = np.log(diffusivities) + # Do a least squares regression of log(D) vs 1/T + a = np.array([t_1, np.ones(len(temps))]).T + w, res, _, _ = np.linalg.lstsq(a, logd, rcond=None) + w = np.array(w) + n = len(temps) + if n > 2: + std_Ea = (res[0] / (n - 2) / (n * np.var(t_1))) ** 0.5 * const.k / const.e + else: + std_Ea = None + return -w[0] * const.k / const.e, np.exp(w[1]), std_Ea
    + + +
    [docs]def get_extrapolated_diffusivity(temps, diffusivities, new_temp): + """ + Returns (Arrhenius) extrapolated diffusivity at new_temp + + Args: + temps ([float]): A sequence of temperatures. units: K + diffusivities ([float]): A sequence of diffusivities (e.g., + from DiffusionAnalyzer.diffusivity). units: cm^2/s + new_temp (float): desired temperature. units: K + + Returns: + (float) Diffusivity at extrapolated temp in mS/cm. + """ + Ea, c, _ = fit_arrhenius(temps, diffusivities) + return c * np.exp(-Ea / (const.k / const.e * new_temp))
    + + +
    [docs]def get_extrapolated_conductivity(temps, diffusivities, new_temp, structure, species): + """ + Returns extrapolated mS/cm conductivity. + + Args: + temps ([float]): A sequence of temperatures. units: K + diffusivities ([float]): A sequence of diffusivities (e.g., + from DiffusionAnalyzer.diffusivity). units: cm^2/s + new_temp (float): desired temperature. units: K + structure (structure): Structure used for the diffusivity calculation + species (string/Species): conducting species + + Returns: + (float) Conductivity at extrapolated temp in mS/cm. + """ + return get_extrapolated_diffusivity(temps, diffusivities, new_temp) * get_conversion_factor( + structure, species, new_temp + )
    + + +
    [docs]def get_arrhenius_plot(temps, diffusivities, diffusivity_errors=None, **kwargs): + r""" + Returns an Arrhenius plot. + + Args: + temps ([float]): A sequence of temperatures. + diffusivities ([float]): A sequence of diffusivities (e.g., + from DiffusionAnalyzer.diffusivity). + diffusivity_errors ([float]): A sequence of errors for the + diffusivities. If None, no error bar is plotted. + \\*\\*kwargs: + Any keyword args supported by matplotlib.pyplot.plot. + + Returns: + A matplotlib.pyplot object. Do plt.show() to show the plot. + """ + Ea, c, _ = fit_arrhenius(temps, diffusivities) + + from pymatgen.util.plotting import pretty_plot + + plt = pretty_plot(12, 8) + + # log10 of the arrhenius fit + arr = c * np.exp(-Ea / (const.k / const.e * np.array(temps))) + + t_1 = 1000 / np.array(temps) + + plt.plot(t_1, diffusivities, "ko", t_1, arr, "k--", markersize=10, **kwargs) + if diffusivity_errors is not None: + n = len(diffusivity_errors) + plt.errorbar( + t_1[0:n], + diffusivities[0:n], + yerr=diffusivity_errors, + fmt="ko", + ecolor="k", + capthick=2, + linewidth=2, + ) + ax = plt.axes() + ax.set_yscale("log") + plt.text( + 0.6, + 0.85, + "E$_a$ = {:.0f} meV".format(Ea * 1000), + fontsize=30, + transform=plt.axes().transAxes, + ) + plt.ylabel("D (cm$^2$/s)") + plt.xlabel("1000/T (K$^{-1}$)") + plt.tight_layout() + return plt
    +
    + +
    +
    +
    +
    + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/_modules/pymatgen/analysis/diffusion/neb/full_path_mapper.html b/docs/_modules/pymatgen/analysis/diffusion/neb/full_path_mapper.html index a894b98b..81980e60 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/neb/full_path_mapper.html +++ b/docs/_modules/pymatgen/analysis/diffusion/neb/full_path_mapper.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.full_path_mapper — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.full_path_mapper — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/neb/io.html b/docs/_modules/pymatgen/analysis/diffusion/neb/io.html index d7d1e79a..4a326cc3 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/neb/io.html +++ b/docs/_modules/pymatgen/analysis/diffusion/neb/io.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.io — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.io — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/neb/pathfinder.html b/docs/_modules/pymatgen/analysis/diffusion/neb/pathfinder.html index 9e3781b1..62f32ca2 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/neb/pathfinder.html +++ b/docs/_modules/pymatgen/analysis/diffusion/neb/pathfinder.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.pathfinder — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.pathfinder — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/neb/periodic_dijkstra.html b/docs/_modules/pymatgen/analysis/diffusion/neb/periodic_dijkstra.html index 36bb1d38..50e8d367 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/neb/periodic_dijkstra.html +++ b/docs/_modules/pymatgen/analysis/diffusion/neb/periodic_dijkstra.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.periodic_dijkstra — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.periodic_dijkstra — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/neb/tests/test_full_path_mapper.html b/docs/_modules/pymatgen/analysis/diffusion/neb/tests/test_full_path_mapper.html index 074b9fdc..ccc6bc8c 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/neb/tests/test_full_path_mapper.html +++ b/docs/_modules/pymatgen/analysis/diffusion/neb/tests/test_full_path_mapper.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/neb/tests/test_io.html b/docs/_modules/pymatgen/analysis/diffusion/neb/tests/test_io.html index cfe9ab8c..02258a0a 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/neb/tests/test_io.html +++ b/docs/_modules/pymatgen/analysis/diffusion/neb/tests/test_io.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.tests.test_io — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.tests.test_io — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/neb/tests/test_pathfinder.html b/docs/_modules/pymatgen/analysis/diffusion/neb/tests/test_pathfinder.html index dd9f4739..01973f3b 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/neb/tests/test_pathfinder.html +++ b/docs/_modules/pymatgen/analysis/diffusion/neb/tests/test_pathfinder.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.tests.test_pathfinder — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.tests.test_pathfinder — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/tests/test_analyzer.html b/docs/_modules/pymatgen/analysis/diffusion/tests/test_analyzer.html new file mode 100644 index 00000000..ed431d2c --- /dev/null +++ b/docs/_modules/pymatgen/analysis/diffusion/tests/test_analyzer.html @@ -0,0 +1,589 @@ + + + + + + + + pymatgen.analysis.diffusion.tests.test_analyzer — pymatgen-diffusion 2021.3.6 documentation + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Source code for pymatgen.analysis.diffusion.tests.test_analyzer

    +# coding: utf-8
    +# Copyright (c) Pymatgen Development Team.
    +# Distributed under the terms of the MIT License.
    +
    +
    +import csv
    +import json
    +import os
    +import random
    +import unittest
    +
    +import numpy as np
    +import scipy.constants as const
    +
    +from pymatgen.analysis.diffusion.analyzer import (
    +    DiffusionAnalyzer,
    +    fit_arrhenius,
    +    get_conversion_factor,
    +)
    +from pymatgen.core.lattice import Lattice
    +from pymatgen.core.structure import Structure
    +from pymatgen.util.testing import PymatgenTest
    +
    +module_dir = os.path.dirname(os.path.abspath(__file__))
    +
    +
    +
    [docs]class FuncTest(PymatgenTest): +
    [docs] def test_get_conversion_factor(self): + s = PymatgenTest.get_structure("LiFePO4") + # large tolerance because scipy constants changed between 0.16.1 and 0.17 + self.assertAlmostEqual(41370704.343540139, get_conversion_factor(s, "Li", 600), delta=20)
    + +
    [docs] def test_fit_arrhenius(self): + Ea = 0.5 + k = const.k / const.e + c = 12 + temps = np.array([300, 1000, 500]) + diffusivities = c * np.exp(-Ea / (k * temps)) + diffusivities *= np.array([1.00601834013, 1.00803236262, 0.98609720824]) + r = fit_arrhenius(temps, diffusivities) + self.assertAlmostEqual(r[0], Ea) + self.assertAlmostEqual(r[1], c) + self.assertAlmostEqual(r[2], 0.000895566) + + # when not enough values for error estimate + r2 = fit_arrhenius([1, 2], [10, 10]) + self.assertAlmostEqual(r2[0], 0) + self.assertAlmostEqual(r2[1], 10) + self.assertEqual(r2[2], None)
    + + +
    [docs]class DiffusionAnalyzerTest(PymatgenTest): +
    [docs] def test_init(self): + # Diffusion vasprun.xmls are rather large. We are only going to use a + # very small preprocessed run for testing. Note that the results are + # unreliable for short runs. + with open(os.path.join(module_dir, "DiffusionAnalyzer.json")) as f: + dd = json.load(f) + + d = DiffusionAnalyzer.from_dict(dd) + # large tolerance because scipy constants changed between 0.16.1 and 0.17 + self.assertAlmostEqual(d.conductivity, 74.165372613735684, 4) + self.assertAlmostEqual(d.chg_conductivity, 232.8278799754324, 4) + self.assertAlmostEqual(d.diffusivity, 1.16083658794e-06, 7) + self.assertAlmostEqual(d.chg_diffusivity, 3.64565578208e-06, 7) + self.assertAlmostEqual(d.conductivity_std_dev, 0.0097244677795984488, 7) + self.assertAlmostEqual(d.diffusivity_std_dev, 9.1013023085561779e-09, 7) + self.assertAlmostEqual(d.chg_diffusivity_std_dev, 7.20911399729e-10, 5) + self.assertAlmostEqual(d.haven_ratio, 0.31854161048867402, 7) + self.assertArrayAlmostEqual(d.conductivity_components, [45.7903694, 26.1651956, 150.5406140], 3) + self.assertArrayAlmostEqual( + d.diffusivity_components, + [7.49601236e-07, 4.90254273e-07, 2.24649255e-06], + ) + self.assertArrayAlmostEqual(d.conductivity_components_std_dev, [0.0063566, 0.0180854, 0.0217918]) + self.assertArrayAlmostEqual( + d.diffusivity_components_std_dev, + [8.9465670e-09, 2.4931224e-08, 2.2636384e-08], + ) + self.assertArrayAlmostEqual(d.mscd[0:4], [0.69131064, 0.71794072, 0.74315283, 0.76703961]) + + self.assertArrayAlmostEqual( + d.max_ion_displacements, + [ + 1.4620659693989553, + 1.2787303484445025, + 3.419618540097756, + 2.340104469126246, + 2.6080973517594233, + 1.3928579365672844, + 1.3561505956708932, + 1.6699242923686253, + 1.0352389639563648, + 1.1662520093955808, + 1.2322019205885841, + 0.8094210554832534, + 1.9917808504954169, + 1.2684148391206396, + 2.392633794162402, + 2.566313049232671, + 1.3175030435622759, + 1.4628945430952793, + 1.0984921286753002, + 1.2864482076554093, + 0.655567027815413, + 0.5986961164605746, + 0.5639091444309045, + 0.6166004192954059, + 0.5997911580422605, + 0.4374606277579815, + 1.1865683960470783, + 0.9017064371676591, + 0.6644840367853767, + 1.0346375380664645, + 0.6177630142863979, + 0.7952002051914302, + 0.7342686123054011, + 0.7858047956905577, + 0.5570732369065661, + 1.0942937746885417, + 0.6509372395308788, + 1.0876687380413455, + 0.7058162184725, + 0.8298306317598585, + 0.7813913747621343, + 0.7337655232056153, + 0.9057161616236746, + 0.5979093093186919, + 0.6830333586985015, + 0.7926500894084628, + 0.6765180009988608, + 0.8555866032968998, + 0.713087091642237, + 0.7621007695790749, + ], + ) + + self.assertEqual(d.sq_disp_ions.shape, (50, 206)) + self.assertEqual(d.lattices.shape, (1, 3, 3)) + self.assertEqual(d.mscd.shape, (206,)) + self.assertEqual(d.mscd.shape, d.msd.shape) + self.assertAlmostEqual(d.max_framework_displacement, 1.18656839605) + + ss = list(d.get_drift_corrected_structures(10, 1000, 20)) + self.assertEqual(len(ss), 50) + n = random.randint(0, 49) + n_orig = n * 20 + 10 + self.assertArrayAlmostEqual( + ss[n].cart_coords - d.structure.cart_coords + d.drift[:, n_orig, :], + d.disp[:, n_orig, :], + ) + + d = DiffusionAnalyzer.from_dict(d.as_dict()) + self.assertIsInstance(d, DiffusionAnalyzer) + + # Ensure summary dict is json serializable. + json.dumps(d.get_summary_dict(include_msd_t=True)) + + d = DiffusionAnalyzer( + d.structure, + d.disp, + d.specie, + d.temperature, + d.time_step, + d.step_skip, + smoothed="max", + ) + self.assertAlmostEqual(d.conductivity, 74.165372613735684, 4) + self.assertAlmostEqual(d.diffusivity, 1.14606446822e-06, 7) + self.assertAlmostEqual(d.haven_ratio, 0.318541610489, 6) + self.assertAlmostEqual(d.chg_conductivity, 232.8278799754324, 4) + self.assertAlmostEqual(d.chg_diffusivity, 3.64565578208e-06, 7) + + d = DiffusionAnalyzer( + d.structure, + d.disp, + d.specie, + d.temperature, + d.time_step, + d.step_skip, + smoothed=False, + ) + self.assertAlmostEqual(d.conductivity, 27.20479170406027, 4) + self.assertAlmostEqual(d.diffusivity, 4.25976905436e-07, 7) + self.assertAlmostEqual(d.chg_diffusivity, 1.6666666666666667e-17, 3) + + d = DiffusionAnalyzer( + d.structure, + d.disp, + d.specie, + d.temperature, + d.time_step, + d.step_skip, + smoothed="constant", + avg_nsteps=100, + ) + + self.assertAlmostEqual(d.conductivity, 47.404056230438741, 4) + self.assertAlmostEqual(d.diffusivity, 7.4226016496716148e-07, 7) + self.assertAlmostEqual(d.chg_conductivity, 1.06440821953e-09, 4) + + # Can't average over 2000 steps because this is a 1000-step run. + self.assertRaises( + ValueError, + DiffusionAnalyzer, + d.structure, + d.disp, + d.specie, + d.temperature, + d.time_step, + d.step_skip, + smoothed="constant", + avg_nsteps=2000, + ) + + d = DiffusionAnalyzer.from_structures( + list(d.get_drift_corrected_structures()), + d.specie, + d.temperature, + d.time_step, + d.step_skip, + smoothed=d.smoothed, + avg_nsteps=100, + ) + self.assertAlmostEqual(d.conductivity, 47.404056230438741, 4) + self.assertAlmostEqual(d.diffusivity, 7.4226016496716148e-07, 7) + + d.export_msdt("test.csv") + with open("test.csv") as f: + data = [] + for row in csv.reader(f): + if row: + data.append(row) + data.pop(0) + data = np.array(data, dtype=np.float64) + self.assertArrayAlmostEqual(data[:, 1], d.msd) + self.assertArrayAlmostEqual(data[:, -1], d.mscd) + os.remove("test.csv")
    + +
    [docs] def test_init_npt(self): + # Diffusion vasprun.xmls are rather large. We are only going to use a + # very small preprocessed run for testing. Note that the results are + # unreliable for short runs. + with open(os.path.join(module_dir, "DiffusionAnalyzer_NPT.json"), "r") as f: + dd = json.load(f) + d = DiffusionAnalyzer.from_dict(dd) + # large tolerance because scipy constants changed between 0.16.1 and 0.17 + self.assertAlmostEqual(d.conductivity, 499.1504129387108, 4) + self.assertAlmostEqual(d.chg_conductivity, 1219.5959181678043, 4) + self.assertAlmostEqual(d.diffusivity, 8.40265434771e-06, 7) + self.assertAlmostEqual(d.chg_diffusivity, 2.05305709033e-05, 6) + self.assertAlmostEqual(d.conductivity_std_dev, 0.10368477696021029, 7) + self.assertAlmostEqual(d.diffusivity_std_dev, 9.1013023085561779e-09, 7) + self.assertAlmostEqual(d.chg_diffusivity_std_dev, 1.20834853646e-08, 6) + self.assertAlmostEqual(d.haven_ratio, 0.409275240679, 7) + self.assertArrayAlmostEqual(d.conductivity_components, [455.178101, 602.252644, 440.0210014], 3) + self.assertArrayAlmostEqual( + d.diffusivity_components, + [7.66242570e-06, 1.01382648e-05, 7.40727250e-06], + ) + self.assertArrayAlmostEqual(d.conductivity_components_std_dev, [0.1196577, 0.0973347, 0.1525400]) + self.assertArrayAlmostEqual( + d.diffusivity_components_std_dev, + [2.0143072e-09, 1.6385239e-09, 2.5678445e-09], + ) + + self.assertArrayAlmostEqual( + d.max_ion_displacements, + [ + 1.13147881, + 0.79899554, + 1.04153733, + 0.96061850, + 0.83039864, + 0.70246715, + 0.61365911, + 0.67965179, + 1.91973907, + 1.69127386, + 1.60568746, + 1.35587641, + 1.03280378, + 0.99202692, + 2.03359655, + 1.03760269, + 1.40228350, + 1.36315080, + 1.27414979, + 1.26742035, + 0.88199589, + 0.97700804, + 1.11323184, + 1.00139511, + 2.94164403, + 0.89438909, + 1.41508334, + 1.23660358, + 0.39322939, + 0.54264064, + 1.25291806, + 0.62869809, + 0.40846708, + 1.43415505, + 0.88891241, + 0.56259128, + 0.81712740, + 0.52700441, + 0.51011733, + 0.55557882, + 0.49131002, + 0.66740277, + 0.57798671, + 0.63521025, + 0.50277142, + 0.52878021, + 0.67803443, + 0.81161269, + 0.46486345, + 0.47132761, + 0.74301293, + 0.79285519, + 0.48789600, + 0.61776836, + 0.60695847, + 0.67767756, + 0.70972268, + 1.08232442, + 0.87871177, + 0.84674206, + 0.45694693, + 0.60417985, + 0.61652272, + 0.66444583, + 0.52211986, + 0.56544134, + 0.43311443, + 0.43027547, + 1.10730439, + 0.59829728, + 0.52270635, + 0.72327608, + 1.02919775, + 0.84423208, + 0.61694764, + 0.72795752, + 0.72957755, + 0.55491631, + 0.68507454, + 0.76745343, + 0.96346584, + 0.66672645, + 1.06810107, + 0.65705843, + ], + ) + + self.assertEqual(d.sq_disp_ions.shape, (84, 217)) + self.assertEqual(d.lattices.shape, (1001, 3, 3)) + self.assertEqual(d.mscd.shape, (217,)) + self.assertEqual(d.mscd.shape, d.msd.shape) + + self.assertAlmostEqual(d.max_framework_displacement, 1.43415505156) + + ss = list(d.get_drift_corrected_structures(10, 1000, 20)) + self.assertEqual(len(ss), 50) + n = random.randint(0, 49) + n_orig = n * 20 + 10 + self.assertArrayAlmostEqual( + ss[n].cart_coords - d.structure.cart_coords + d.drift[:, n_orig, :], + d.disp[:, n_orig, :], + ) + + d = DiffusionAnalyzer.from_dict(d.as_dict()) + self.assertIsInstance(d, DiffusionAnalyzer) + + # Ensure summary dict is json serializable. + json.dumps(d.get_summary_dict(include_msd_t=True)) + + d = DiffusionAnalyzer( + d.structure, + d.disp, + d.specie, + d.temperature, + d.time_step, + d.step_skip, + smoothed="max", + ) + self.assertAlmostEqual(d.conductivity, 499.1504129387108, 4) + self.assertAlmostEqual(d.diffusivity, 8.40265434771e-06, 7) + self.assertAlmostEqual(d.haven_ratio, 0.409275240679, 7) + self.assertAlmostEqual(d.chg_diffusivity, 2.05305709033e-05, 7) + + d = DiffusionAnalyzer( + d.structure, + d.disp, + d.specie, + d.temperature, + d.time_step, + d.step_skip, + smoothed=False, + ) + self.assertAlmostEqual(d.conductivity, 406.5964019770787, 4) + self.assertAlmostEqual(d.diffusivity, 6.8446082e-06, 7) + self.assertAlmostEqual(d.chg_diffusivity, 1.03585877962e-05, 6) + self.assertAlmostEqual(d.haven_ratio, 0.6607665413, 6) + + d = DiffusionAnalyzer( + d.structure, + d.disp, + d.specie, + d.temperature, + d.time_step, + d.step_skip, + smoothed="constant", + avg_nsteps=100, + ) + + self.assertAlmostEqual(d.conductivity, 425.77884571149525, 4) + self.assertAlmostEqual(d.diffusivity, 7.167523809142514e-06, 7) + self.assertAlmostEqual(d.chg_diffusivity, 9.33480892187e-06, 6) + self.assertAlmostEqual(d.haven_ratio, 0.767827586952, 6) + self.assertAlmostEqual(d.chg_conductivity, 554.5240271992852, 6) + + # Can't average over 2000 steps because this is a 1000-step run. + self.assertRaises( + ValueError, + DiffusionAnalyzer, + d.structure, + d.disp, + d.specie, + d.temperature, + d.time_step, + d.step_skip, + smoothed="constant", + avg_nsteps=2000, + ) + + d = DiffusionAnalyzer.from_structures( + list(d.get_drift_corrected_structures()), + d.specie, + d.temperature, + d.time_step, + d.step_skip, + smoothed=d.smoothed, + avg_nsteps=100, + ) + self.assertAlmostEqual(d.conductivity, 425.7788457114952, 4) + self.assertAlmostEqual(d.diffusivity, 7.1675238091425148e-06, 7) + self.assertAlmostEqual(d.haven_ratio, 0.767827586952, 7) + self.assertAlmostEqual(d.chg_conductivity, 554.5240271992852, 6) + + d.export_msdt("test.csv") + with open("test.csv") as f: + data = [] + for row in csv.reader(f): + if row: + data.append(row) + data.pop(0) + data = np.array(data, dtype=np.float64) + self.assertArrayAlmostEqual(data[:, 1], d.msd) + self.assertArrayAlmostEqual(data[:, -1], d.mscd) + os.remove("test.csv")
    + +
    [docs] def test_from_structure_NPT(self): + + coords1 = np.array([[0.0, 0.0, 0.0], [0.5, 0.5, 0.5]]) + coords2 = np.array([[0.0, 0.0, 0.0], [0.6, 0.6, 0.6]]) + coords3 = np.array([[0.0, 0.0, 0.0], [0.7, 0.7, 0.7]]) + lattice1 = Lattice.from_parameters(a=2.0, b=2.0, c=2.0, alpha=90, beta=90, gamma=90) + lattice2 = Lattice.from_parameters(a=2.1, b=2.1, c=2.1, alpha=90, beta=90, gamma=90) + lattice3 = Lattice.from_parameters(a=2.0, b=2.0, c=2.0, alpha=90, beta=90, gamma=90) + s1 = Structure(coords=coords1, lattice=lattice1, species=["F", "Li"]) + s2 = Structure(coords=coords2, lattice=lattice2, species=["F", "Li"]) + s3 = Structure(coords=coords3, lattice=lattice3, species=["F", "Li"]) + structures = [s1, s2, s3] + d = DiffusionAnalyzer.from_structures( + structures, + specie="Li", + temperature=500.0, + time_step=2.0, + step_skip=1, + smoothed=None, + ) + self.assertArrayAlmostEqual( + d.disp[1], + np.array([[0.0, 0.0, 0.0], [0.21, 0.21, 0.21], [0.40, 0.40, 0.40]]), + )
    + + +if __name__ == "__main__": + unittest.main() +
    + +
    +
    +
    +
    + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/_modules/pymatgen/analysis/diffusion/utils/parse_entries.html b/docs/_modules/pymatgen/analysis/diffusion/utils/parse_entries.html index 84b3c4b5..121177f1 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/utils/parse_entries.html +++ b/docs/_modules/pymatgen/analysis/diffusion/utils/parse_entries.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.utils.parse_entries — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.utils.parse_entries — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/utils/supercells.html b/docs/_modules/pymatgen/analysis/diffusion/utils/supercells.html index ff4211ef..5e664e2c 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/utils/supercells.html +++ b/docs/_modules/pymatgen/analysis/diffusion/utils/supercells.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.utils.supercells — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.utils.supercells — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/pymatgen/analysis/diffusion/utils/tests/test_parse_entries.html b/docs/_modules/pymatgen/analysis/diffusion/utils/tests/test_parse_entries.html index 639f12cf..a4cbb1fa 100644 --- a/docs/_modules/pymatgen/analysis/diffusion/utils/tests/test_parse_entries.html +++ b/docs/_modules/pymatgen/analysis/diffusion/utils/tests/test_parse_entries.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.utils.tests.test_parse_entries — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.utils.tests.test_parse_entries — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_sources/pymatgen.analysis.diffusion.analyzer.rst.txt b/docs/_sources/pymatgen.analysis.diffusion.analyzer.rst.txt new file mode 100644 index 00000000..8156b21f --- /dev/null +++ b/docs/_sources/pymatgen.analysis.diffusion.analyzer.rst.txt @@ -0,0 +1,7 @@ +pymatgen.analysis.diffusion.analyzer module +=========================================== + +.. automodule:: pymatgen.analysis.diffusion.analyzer + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_sources/pymatgen.analysis.diffusion.rst.txt b/docs/_sources/pymatgen.analysis.diffusion.rst.txt index 0b7a7582..677e4db1 100644 --- a/docs/_sources/pymatgen.analysis.diffusion.rst.txt +++ b/docs/_sources/pymatgen.analysis.diffusion.rst.txt @@ -11,6 +11,14 @@ Subpackages pymatgen.analysis.diffusion.neb pymatgen.analysis.diffusion.utils +Submodules +---------- + +.. toctree:: + :maxdepth: 7 + + pymatgen.analysis.diffusion.analyzer + Module contents --------------- diff --git a/docs/_sources/pymatgen.analysis.diffusion.tests.test_analyzer.rst.txt b/docs/_sources/pymatgen.analysis.diffusion.tests.test_analyzer.rst.txt new file mode 100644 index 00000000..7a235fcf --- /dev/null +++ b/docs/_sources/pymatgen.analysis.diffusion.tests.test_analyzer.rst.txt @@ -0,0 +1,7 @@ +pymatgen.analysis.diffusion.tests.test\_analyzer module +======================================================= + +.. automodule:: pymatgen.analysis.diffusion.tests.test_analyzer + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index a52b8425..eafa0f47 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '2021.3.5', + VERSION: '2021.3.6', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/_themes/README.html b/docs/_themes/README.html index e87c52bd..ef0057a5 100644 --- a/docs/_themes/README.html +++ b/docs/_themes/README.html @@ -5,7 +5,7 @@ - krTheme Sphinx Style — pymatgen-diffusion 2021.3.5 documentation + krTheme Sphinx Style — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - +
    diff --git a/docs/change_log.html b/docs/change_log.html index 8895ba25..fcbfa800 100644 --- a/docs/change_log.html +++ b/docs/change_log.html @@ -5,7 +5,7 @@ - Change Log — pymatgen-diffusion 2021.3.5 documentation + Change Log — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - +
    diff --git a/docs/doctrees/environment.pickle b/docs/doctrees/environment.pickle index afcc391d8cc64e2014e0659e2fca9fabd1681e83..d811a854817541b715dfa4e188fffa041c5117a2 100644 GIT binary patch literal 391969 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∈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

    W{%1S=@J?S{dES?qTy7W& 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 CsdIY( delta 49604 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 literal 0 HcmV?d00001 diff --git a/docs/doctrees/pymatgen.analysis.diffusion.doctree b/docs/doctrees/pymatgen.analysis.diffusion.doctree index e0e5a3efe85852378c87be82ae4600a71a806de2..97dfa81ec54508311b90dd5cc6a04fff7df6a053 100644 GIT binary patch delta 439 zcmYL_KS)AR6vln}t`8**mkj)qh=p3Tw6xTalS!{32rDhFD13-dEqjAOpo<_#%Y6}q zh7gSnA~XvjEzu~r2+p-MwsoKVaX6gA$M2l;o%6Kt;U^VxO&uLl6+PBHHKi2NYA#dK zASE@-HKr1K6n7n)p{jPN1wmk*01;L(hAh~DoYdq-fSnQ-R%xE*$`_e4t)@}z^D$Qx z@tA}I8HaTo)sd(p88hIxj+3OOB8)A#u?$bl0T-%jio&Ze@$ptak2FPqrzIZ2AAW;# zMP?W0eb&;{GM&&IZA?|RF8SH3;AS;(jXdzSdsZ-q9kaY@LxAabv6Fp?cci1MtV!O; z3$OY*DLk__NjU#-HI@1I7DSKPq;0|3jY~I1l9dF5q5ElRnj&M2pdgDDZZX6_ZCLVD z$()yq{IB|9V;PE!mW-jS!lx@E%y52%^F<7}vmWc)7KI*rw|T`VpR1b?brW619u>X; Ds9B#o delta 174 zcmaE(v`wD1fpzL?{*A1SER*%vj3=*Wah|+{Z8mFThIB^3WEb{xtkZ$4sgos`v=}E( z_F#_@2T5cwW-yl~rDn+0PSMCvhy@Z8CU52NV&vb%Ih~0qbJjFo<+844iox(ptmLY<6dK(i-IuI5)|oG^JI TzZ|3FNPi3*UdvoVo1I+H1$u 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 T16i|l=ZQ8!bc$x`^<(pY(sj27 literal 0 HcmV?d00001 diff --git a/docs/genindex.html b/docs/genindex.html index 084dd964..604b0830 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -5,7 +5,7 @@ - Index — pymatgen-diffusion 2021.3.5 documentation + Index — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

    Navigation

  • modules |
  • - + @@ -81,6 +81,8 @@

    A

      +
    • as_dict() (DiffusionAnalyzer method) +
    • assign_cost_to_graph() (MigrationGraph method)
    • atom_dist() (EvolutionAnalyzer static method) @@ -111,10 +113,14 @@

      C

      D

      @@ -130,6 +136,8 @@

      E

      + - + - + + + + + +
      +
    • get_conversion_factor() (in module pymatgen.analysis.diffusion.analyzer) +
    • get_coordination_number() (RadialDistributionFunctionFast method)
    • get_df() (EvolutionAnalyzer method) +
    • +
    • get_drift_corrected_structures() (DiffusionAnalyzer method)
    • get_endpoint_dist() (in module pymatgen.analysis.diffusion.neb.io)
    • get_endpoints_from_index() (in module pymatgen.analysis.diffusion.neb.io) +
    • +
    • get_extrapolated_conductivity() (in module pymatgen.analysis.diffusion.analyzer) +
    • +
    • get_extrapolated_diffusivity() (in module pymatgen.analysis.diffusion.analyzer) +
    • +
    • get_framework_rms_plot() (DiffusionAnalyzer method)
    • get_full_structure() (ProbabilityDensityAnalysis method)
    • @@ -199,12 +231,14 @@

      G

    • get_least_chg_path() (ChargeBarrierGraph method)
    • +
    • test_filter_and_merge() (ParseEntriesTest method) +
    • +
    • test_fit_arrhenius() (FuncTest method) +
    • +
    • test_from_structure_NPT() (DiffusionAnalyzerTest method)
    • test_generate_stable_sites() (ProbabilityDensityTest method)
    • test_get_all_sym_sites() (ParseEntriesTest method) +
    • +
    • test_get_conversion_factor() (FuncTest method)
    • test_get_df() (EvolutionAnalyzerTest method)
    • @@ -698,20 +760,24 @@

      T

    • test_idpp_from_ep() (IDPPSolverTest method)
    • +
      diff --git a/docs/modules.html b/docs/modules.html index bdc9aeb6..6e7288c5 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -5,7 +5,7 @@ - pymatgen — pymatgen-diffusion 2021.3.5 documentation + pymatgen — pymatgen-diffusion 2021.3.6 documentation @@ -44,7 +44,7 @@

      Navigation

    • previous |
    • - + diff --git a/docs/objects.inv b/docs/objects.inv index a7d6e6766373364f08f60906848402e54635200a..840db38007e3855f5ce8e1341efc1e90a95ede35 100644 GIT binary patch delta 2785 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 - Python Module Index — pymatgen-diffusion 2021.3.5 documentation + Python Module Index — pymatgen-diffusion 2021.3.6 documentation @@ -39,7 +39,7 @@

      Navigation

    • modules |
    • - + @@ -116,6 +116,11 @@

      Python Module Index

          pymatgen.analysis.diffusion.aimd.van_hove
          + pymatgen.analysis.diffusion.analyzer +
          @@ -156,6 +161,11 @@

      Python Module Index

          pymatgen.analysis.diffusion.neb.tests.test_pathfinder
          + pymatgen.analysis.diffusion.tests.test_analyzer +
          diff --git a/docs/pymatgen.analysis.diffusion.aimd.clustering.html b/docs/pymatgen.analysis.diffusion.aimd.clustering.html index bc4fae51..e7a0d93e 100644 --- a/docs/pymatgen.analysis.diffusion.aimd.clustering.html +++ b/docs/pymatgen.analysis.diffusion.aimd.clustering.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.clustering module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.clustering module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.aimd.html b/docs/pymatgen.analysis.diffusion.aimd.html index 59900c1f..4115930f 100644 --- a/docs/pymatgen.analysis.diffusion.aimd.html +++ b/docs/pymatgen.analysis.diffusion.aimd.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd package — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd package — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.aimd.pathway.html b/docs/pymatgen.analysis.diffusion.aimd.pathway.html index 26f51810..5919f882 100644 --- a/docs/pymatgen.analysis.diffusion.aimd.pathway.html +++ b/docs/pymatgen.analysis.diffusion.aimd.pathway.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.pathway module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.pathway module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + @@ -85,7 +85,7 @@

      Navigation

      Parameters
        -
      • diffusion_analyzer (DiffusionAnalyzer) – A +

      • diffusion_analyzer (DiffusionAnalyzer) – A pymatgen.analysis.diffusion_analyzer.DiffusionAnalyzer object

      • interval (float) – the interval between two nearest grid points (in Angstrom)

      • @@ -193,7 +193,7 @@

        Navigation

        • coords_ref (nested list of floats) – Fractional coordinates of a list of reference sites at which the site occupancy will be computed.

        • -
        • diffusion_analyzer (DiffusionAnalyzer) – A +

        • diffusion_analyzer (DiffusionAnalyzer) – A pymatgen.analysis.diffusion_analyzer.DiffusionAnalyzer object

        • species (list of str) – list of species that are of interest.

        diff --git a/docs/pymatgen.analysis.diffusion.aimd.rdf.html b/docs/pymatgen.analysis.diffusion.aimd.rdf.html index edae97dd..878d68e8 100644 --- a/docs/pymatgen.analysis.diffusion.aimd.rdf.html +++ b/docs/pymatgen.analysis.diffusion.aimd.rdf.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.rdf module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.rdf module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

        Navigation

      • modules |
      • - +
      diff --git a/docs/pymatgen.analysis.diffusion.aimd.tests.test_clustering.html b/docs/pymatgen.analysis.diffusion.aimd.tests.test_clustering.html index d4a4a37b..ec822d79 100644 --- a/docs/pymatgen.analysis.diffusion.aimd.tests.test_clustering.html +++ b/docs/pymatgen.analysis.diffusion.aimd.tests.test_clustering.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.tests.test_clustering module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.tests.test_clustering module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.aimd.tests.test_pathway.html b/docs/pymatgen.analysis.diffusion.aimd.tests.test_pathway.html index 05ade338..ad091fbd 100644 --- a/docs/pymatgen.analysis.diffusion.aimd.tests.test_pathway.html +++ b/docs/pymatgen.analysis.diffusion.aimd.tests.test_pathway.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.tests.test_pathway module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.tests.test_pathway module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.aimd.tests.test_rdf.html b/docs/pymatgen.analysis.diffusion.aimd.tests.test_rdf.html index cb73b5bc..8e00d05f 100644 --- a/docs/pymatgen.analysis.diffusion.aimd.tests.test_rdf.html +++ b/docs/pymatgen.analysis.diffusion.aimd.tests.test_rdf.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.tests.test_rdf module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.tests.test_rdf module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.aimd.tests.test_van_hove.html b/docs/pymatgen.analysis.diffusion.aimd.tests.test_van_hove.html index 4edfb13b..69aff122 100644 --- a/docs/pymatgen.analysis.diffusion.aimd.tests.test_van_hove.html +++ b/docs/pymatgen.analysis.diffusion.aimd.tests.test_van_hove.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.tests.test_van_hove module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.tests.test_van_hove module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.aimd.van_hove.html b/docs/pymatgen.analysis.diffusion.aimd.van_hove.html index 89e90fea..70be629b 100644 --- a/docs/pymatgen.analysis.diffusion.aimd.van_hove.html +++ b/docs/pymatgen.analysis.diffusion.aimd.van_hove.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.aimd.van_hove module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.aimd.van_hove module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + @@ -260,7 +260,7 @@

      Navigation

      -class VanHoveAnalysis(diffusion_analyzer: pymatgen.analysis.diffusion_analyzer.DiffusionAnalyzer, avg_nsteps: int = 50, ngrid: int = 101, rmax: float = 10.0, step_skip: int = 50, sigma: float = 0.1, cell_range: int = 1, species: Union[Tuple, List] = ('Li', 'Na'), reference_species: Optional[Union[Tuple, List]] = None, indices: Optional[List] = None)[source]
      +class VanHoveAnalysis(diffusion_analyzer: pymatgen.analysis.diffusion.analyzer.DiffusionAnalyzer, avg_nsteps: int = 50, ngrid: int = 101, rmax: float = 10.0, step_skip: int = 50, sigma: float = 0.1, cell_range: int = 1, species: Union[Tuple, List] = ('Li', 'Na'), reference_species: Optional[Union[Tuple, List]] = None, indices: Optional[List] = None)[source]

      Bases: object

      Class for van Hove function analysis. In particular, self-part (Gs) and distinct-part (Gd) of the van Hove correlation function G(r,t) @@ -273,7 +273,7 @@

      Navigation

      Parameters
        -
      • diffusion_analyzer (DiffusionAnalyzer) – A +

      • diffusion_analyzer (DiffusionAnalyzer) – A pymatgen.analysis.diffusion_analyzer.DiffusionAnalyzer object

      • avg_nsteps (int) – Number of t0 used for statistical average

      • ngrid (int) – Number of radial grid points

      • diff --git a/docs/pymatgen.analysis.diffusion.analyzer.html b/docs/pymatgen.analysis.diffusion.analyzer.html new file mode 100644 index 00000000..c2dd93eb --- /dev/null +++ b/docs/pymatgen.analysis.diffusion.analyzer.html @@ -0,0 +1,520 @@ + + + + + + + + pymatgen.analysis.diffusion.analyzer module — pymatgen-diffusion 2021.3.6 documentation + + + + + + + + + + + + + + + + + + + +
        +
        +
        +
        + +
        +

        pymatgen.analysis.diffusion.analyzer module

        +

        A module to perform diffusion analyses (e.g. calculating diffusivity from +mean square displacements etc.). If you use this module, please consider +citing the following papers:

        +
        Ong, S. P., Mo, Y., Richards, W. D., Miara, L., Lee, H. S., & Ceder, G.
        +(2013). Phase stability, electrochemical stability and ionic conductivity
        +of the Li10+-1MP2X12 (M = Ge, Si, Sn, Al or P, and X = O, S or Se) family
        +of superionic conductors. Energy & Environmental Science, 6(1), 148.
        +doi:10.1039/c2ee23355j
        +
        +Mo, Y., Ong, S. P., & Ceder, G. (2012). First Principles Study of the
        +Li10GeP2S12 Lithium Super Ionic Conductor Material. Chemistry of Materials,
        +24(1), 15-17. doi:10.1021/cm203303y
        +
        +
        +
        +
        +class DiffusionAnalyzer(structure, displacements, specie, temperature, time_step, step_skip, smoothed='max', min_obs=30, avg_nsteps=1000, lattices=None)[source]
        +

        Bases: monty.json.MSONable

        +

        Class for performing diffusion analysis.

        +

        This constructor is meant to be used with pre-processed data. +Other convenient constructors are provided as class methods (see +from_vaspruns and from_files).

        +

        Given a matrix of displacements (see arguments below for expected +format), the diffusivity is given by:

        +
        D = 1 / 2dt * <mean square displacement>
        +
        +
        +

        where d is the dimensionality, t is the time. To obtain a reliable +diffusion estimate, a least squares regression of the MSD against +time to obtain the slope, which is then related to the diffusivity.

        +

        For traditional analysis, use smoothed=False and weighted=False.

        +
        +
        Parameters
        +
          +
        • structure (Structure) – Initial structure.

        • +
        • displacements (array) – Numpy array of with shape [site, +time step, axis]

        • +
        • specie (Element/Species) – Species to calculate diffusivity for as a +String. E.g., “Li”.

        • +
        • temperature (float) – Temperature of the diffusion run in Kelvin.

        • +
        • time_step (int) – Time step between measurements.

        • +
        • step_skip (int) – Sampling frequency of the displacements ( +time_step is multiplied by this number to get the real time +between measurements)

        • +
        • smoothed (str) –

          Whether to smooth the MSD, and what mode to smooth. +Supported modes are:

          +
            +
          1. ”max”, which tries to use the maximum # +of data points for each time origin, subject to a +minimum # of observations given by min_obs, and then +weights the observations based on the variance +accordingly. This is the default.

          2. +
          3. ”constant”, in which each timestep is averaged over +the number of time_steps given by min_steps.

          4. +
          5. None / False / any other false-like quantity. No

          6. +
          +
          +

          smoothing.

          +
          +

        • +
        • min_obs (int) – Used with smoothed=”max”. Minimum number of +observations to have before including in the MSD vs dt +calculation. E.g. If a structure has 10 diffusing atoms, +and min_obs = 30, the MSD vs dt will be +calculated up to dt = total_run_time / 3, so that each +diffusing atom is measured at least 3 uncorrelated times. +Only applies in smoothed=”max”.

        • +
        • avg_nsteps (int) – Used with smoothed=”constant”. Determines the +number of time steps to average over to get the msd for each +timestep. Default of 1000 is usually pretty good.

        • +
        • lattices (array) – Numpy array of lattice matrix of every step. Used +for NPT-AIMD. For NVT-AIMD, the lattice at each time step is +set to the lattice in the “structure” argument.

        • +
        +
        +
        +
        +
        +as_dict()[source]
        +

        Returns: MSONable dict

        +
        + +
        +
        +export_msdt(filename)[source]
        +

        Writes MSD data to a csv file that can be easily plotted in other +software.

        +
        +
        Parameters
        +

        filename (str) – Filename. Supported formats are csv and dat. If +the extension is csv, a csv file is written. Otherwise, +a dat format is assumed.

        +
        +
        +
        + +
        +
        +classmethod from_dict(d)[source]
        +
        +
        Parameters
        +

        d (dict) – Dict representation

        +
        +
        +

        Returns: DiffusionAnalyzer

        +
        + +
        +
        +classmethod from_files(filepaths, specie, step_skip=10, ncores=None, initial_disp=None, initial_structure=None, **kwargs)[source]
        +

        Convenient constructor that takes in a list of vasprun.xml paths to +perform diffusion analysis.

        +
        +
        Parameters
        +
          +
        • filepaths ([str]) – List of paths to vasprun.xml files of runs. ( +must be ordered in sequence of MD simulation). For example, +you may have done sequential VASP runs and they are in run1, +run2, run3, etc. You should then pass in +[“run1/vasprun.xml”, “run2/vasprun.xml”, …].

        • +
        • specie (Element/Species) – Species to calculate diffusivity for as a +String. E.g., “Li”.

        • +
        • step_skip (int) – Sampling frequency of the displacements ( +time_step is multiplied by this number to get the real time +between measurements)

        • +
        • ncores (int) – Numbers of cores to use for multiprocessing. Can +speed up vasprun parsing considerably. Defaults to None, +which means serial. It should be noted that if you want to +use multiprocessing, the number of ionic steps in all vasprun +.xml files should be a multiple of the ionic_step_skip. +Otherwise, inconsistent results may arise. Serial mode has no +such restrictions.

        • +
        • initial_disp (np.ndarray) – Sometimes, you need to iteratively +compute estimates of the diffusivity. This supplies an +initial displacement that will be added on to the initial +displacements. Note that this makes sense only when +smoothed=False.

        • +
        • initial_structure (Structure) – Like initial_disp, this is used +for iterative computations of estimates of the diffusivity. You +typically need to supply both variables. This stipulates the +initial structure from which the current set of displacements +are computed.

        • +
        • \*\*kwargs – kwargs supported by the :class:`DiffusionAnalyzer`_. +Examples include smoothed, min_obs, avg_nsteps.

        • +
        +
        +
        +
        + +
        +
        +classmethod from_structures(structures, specie, temperature, time_step, step_skip, initial_disp=None, initial_structure=None, **kwargs)[source]
        +

        Convenient constructor that takes in a list of Structure objects to +perform diffusion analysis.

        +
        +
        Parameters
        +
          +
        • structures ([Structure]) – list of Structure objects (must be +ordered in sequence of run). E.g., you may have performed +sequential VASP runs to obtain sufficient statistics.

        • +
        • specie (Element/Species) – Species to calculate diffusivity for as a +String. E.g., “Li”.

        • +
        • temperature (float) – Temperature of the diffusion run in Kelvin.

        • +
        • time_step (int) – Time step between measurements.

        • +
        • step_skip (int) – Sampling frequency of the displacements ( +time_step is multiplied by this number to get the real time +between measurements)

        • +
        • initial_disp (np.ndarray) – Sometimes, you need to iteratively +compute estimates of the diffusivity. This supplies an +initial displacement that will be added on to the initial +displacements. Note that this makes sense only when +smoothed=False.

        • +
        • initial_structure (Structure) – Like initial_disp, this is used +for iterative computations of estimates of the diffusivity. You +typically need to supply both variables. This stipulates the +initial structure from which the current set of displacements +are computed.

        • +
        • \*\*kwargs – kwargs supported by the :class:`DiffusionAnalyzer`_. +Examples include smoothed, min_obs, avg_nsteps.

        • +
        +
        +
        +
        + +
        +
        +classmethod from_vaspruns(vaspruns, specie, initial_disp=None, initial_structure=None, **kwargs)[source]
        +

        Convenient constructor that takes in a list of Vasprun objects to +perform diffusion analysis.

        +
        +
        Parameters
        +
          +
        • vaspruns ([Vasprun]) – List of Vaspruns (must be ordered in +sequence of MD simulation). E.g., you may have performed +sequential VASP runs to obtain sufficient statistics.

        • +
        • specie (Element/Species) – Species to calculate diffusivity for as a +String. E.g., “Li”.

        • +
        • initial_disp (np.ndarray) – Sometimes, you need to iteratively +compute estimates of the diffusivity. This supplies an +initial displacement that will be added on to the initial +displacements. Note that this makes sense only when +smoothed=False.

        • +
        • initial_structure (Structure) – Like initial_disp, this is used +for iterative computations of estimates of the diffusivity. You +typically need to supply both variables. This stipulates the +initial stricture from which the current set of displacements +are computed.

        • +
        • \*\*kwargs – kwargs supported by the :class:`DiffusionAnalyzer`_. +Examples include smoothed, min_obs, avg_nsteps.

        • +
        +
        +
        +
        + +
        +
        +get_drift_corrected_structures(start=None, stop=None, step=None)[source]
        +

        Returns an iterator for the drift-corrected structures. Use of +iterator is to reduce memory usage as # of structures in MD can be +huge. You don’t often need all the structures all at once.

        +
        +
        Parameters
        +
          +
        • start (int) – applies a start/stop/step to the iterator. +Faster than applying it after generation, as it reduces the +number of structures created.

        • +
        • stop (int) – applies a start/stop/step to the iterator. +Faster than applying it after generation, as it reduces the +number of structures created.

        • +
        • step (int) – applies a start/stop/step to the iterator. +Faster than applying it after generation, as it reduces the +number of structures created.

        • +
        +
        +
        +
        + +
        +
        +get_framework_rms_plot(plt=None, granularity=200, matching_s=None)[source]
        +

        Get the plot of rms framework displacement vs time. Useful for checking +for melting, especially if framework atoms can move via paddle-wheel +or similar mechanism (which would show up in max framework displacement +but doesn’t constitute melting).

        +
        +
        Parameters
        +
          +
        • plt (matplotlib.pyplot) – If plt is supplied, changes will be made +to an existing plot. Otherwise, a new plot will be created.

        • +
        • granularity (int) – Number of structures to match

        • +
        • matching_s (Structure) – Optionally match to a disordered structure +instead of the first structure in the analyzer. Required when +a secondary mobile ion is present.

        • +
        +
        +
        +

        Notes

        +

        The method doesn’t apply to NPT-AIMD simulation analysis.

        +
        + +
        +
        +get_msd_plot(plt=None, mode='specie')[source]
        +

        Get the plot of the smoothed msd vs time graph. Useful for +checking convergence. This can be written to an image file.

        +
        +
        Parameters
        +
          +
        • plt – A plot object. Defaults to None, which means one will be +generated.

        • +
        • mode (str) – Determines type of msd plot. By “species”, “sites”, +or direction (default). If mode = “mscd”, the smoothed mscd vs. +time will be plotted.

        • +
        +
        +
        +
        + +
        +
        +get_summary_dict(include_msd_t=False, include_mscd_t=False)[source]
        +

        Provides a summary of diffusion information.

        +
        +
        Parameters
        +
          +
        • include_msd_t (bool) – Whether to include mean square displace and +time data with the data.

        • +
        • include_msd_t – Whether to include mean square charge displace and +time data with the data.

        • +
        +
        +
        Returns
        +

        (dict) of diffusion and conductivity data.

        +
        +
        +
        + +
        +
        +plot_msd(mode='default')[source]
        +

        Plot the smoothed msd vs time graph. Useful for checking convergence.

        +
        +
        Parameters
        +

        mode (str) – Can be “default” (the default, shows only the MSD for +the diffusing specie, and its components), “ions” (individual +square displacements of all ions), “species” (mean square +displacement by specie), or “mscd” (overall mean square charge +displacement for diffusing specie).

        +
        +
        +
        + +
        + +
        +
        +fit_arrhenius(temps, diffusivities)[source]
        +
        +
        Returns Ea, c, standard error of Ea from the Arrhenius fit:

        D = c * exp(-Ea/kT)

        +
        +
        +
        +
        Parameters
        +
          +
        • temps ([float]) – A sequence of temperatures. units: K

        • +
        • diffusivities ([float]) – A sequence of diffusivities (e.g., +from DiffusionAnalyzer.diffusivity). units: cm^2/s

        • +
        +
        +
        +
        + +
        +
        +get_arrhenius_plot(temps, diffusivities, diffusivity_errors=None, **kwargs)[source]
        +

        Returns an Arrhenius plot.

        +
        +
        Parameters
        +
          +
        • temps ([float]) – A sequence of temperatures.

        • +
        • diffusivities ([float]) – A sequence of diffusivities (e.g., +from DiffusionAnalyzer.diffusivity).

        • +
        • diffusivity_errors ([float]) – A sequence of errors for the +diffusivities. If None, no error bar is plotted.

        • +
        • \*\*kwargs – Any keyword args supported by matplotlib.pyplot.plot.

        • +
        +
        +
        Returns
        +

        A matplotlib.pyplot object. Do plt.show() to show the plot.

        +
        +
        +
        + +
        +
        +get_conversion_factor(structure, species, temperature)[source]
        +

        Conversion factor to convert between cm^2/s diffusivity measurements and +mS/cm conductivity measurements based on number of atoms of diffusing +species. Note that the charge is based on the oxidation state of the +species (where available), or else the number of valence electrons +(usually a good guess, esp for main group ions).

        +
        +
        Parameters
        +
          +
        • structure (Structure) – Input structure.

        • +
        • species (Element/Species) – Diffusing species.

        • +
        • temperature (float) – Temperature of the diffusion run in Kelvin.

        • +
        +
        +
        Returns
        +

        Conversion factor. +Conductivity (in mS/cm) = Conversion Factor * Diffusivity (in cm^2/s)

        +
        +
        +
        + +
        +
        +get_extrapolated_conductivity(temps, diffusivities, new_temp, structure, species)[source]
        +

        Returns extrapolated mS/cm conductivity.

        +
        +
        Parameters
        +
          +
        • temps ([float]) – A sequence of temperatures. units: K

        • +
        • diffusivities ([float]) – A sequence of diffusivities (e.g., +from DiffusionAnalyzer.diffusivity). units: cm^2/s

        • +
        • new_temp (float) – desired temperature. units: K

        • +
        • structure (structure) – Structure used for the diffusivity calculation

        • +
        • species (string/Species) – conducting species

        • +
        +
        +
        Returns
        +

        (float) Conductivity at extrapolated temp in mS/cm.

        +
        +
        +
        + +
        +
        +get_extrapolated_diffusivity(temps, diffusivities, new_temp)[source]
        +

        Returns (Arrhenius) extrapolated diffusivity at new_temp

        +
        +
        Parameters
        +
          +
        • temps ([float]) – A sequence of temperatures. units: K

        • +
        • diffusivities ([float]) – A sequence of diffusivities (e.g., +from DiffusionAnalyzer.diffusivity). units: cm^2/s

        • +
        • new_temp (float) – desired temperature. units: K

        • +
        +
        +
        Returns
        +

        (float) Diffusivity at extrapolated temp in mS/cm.

        +
        +
        +
        + +
        + + +
        +
        +
        +
        + +
        +
        + + + + + + \ No newline at end of file diff --git a/docs/pymatgen.analysis.diffusion.html b/docs/pymatgen.analysis.diffusion.html index 1bf288b6..d2296ccb 100644 --- a/docs/pymatgen.analysis.diffusion.html +++ b/docs/pymatgen.analysis.diffusion.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion package — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion package — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

        Navigation

      • modules |
      • - +
      @@ -96,6 +96,14 @@

      Subpackages +

      Submodules

      + +

      Module contents

      Package for diffusion analysis.

      @@ -113,6 +121,7 @@

      Table of Contents

      diff --git a/docs/pymatgen.analysis.diffusion.neb.html b/docs/pymatgen.analysis.diffusion.neb.html index e6f1e614..4c20efd3 100644 --- a/docs/pymatgen.analysis.diffusion.neb.html +++ b/docs/pymatgen.analysis.diffusion.neb.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb package — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb package — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.neb.io.html b/docs/pymatgen.analysis.diffusion.neb.io.html index 6174d16f..c1a1538f 100644 --- a/docs/pymatgen.analysis.diffusion.neb.io.html +++ b/docs/pymatgen.analysis.diffusion.neb.io.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.io module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.io module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.neb.pathfinder.html b/docs/pymatgen.analysis.diffusion.neb.pathfinder.html index f7f62f57..957102e9 100644 --- a/docs/pymatgen.analysis.diffusion.neb.pathfinder.html +++ b/docs/pymatgen.analysis.diffusion.neb.pathfinder.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.pathfinder module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.pathfinder module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.neb.periodic_dijkstra.html b/docs/pymatgen.analysis.diffusion.neb.periodic_dijkstra.html index eaf456c6..ea6a2c1f 100644 --- a/docs/pymatgen.analysis.diffusion.neb.periodic_dijkstra.html +++ b/docs/pymatgen.analysis.diffusion.neb.periodic_dijkstra.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.periodic_dijkstra module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.periodic_dijkstra module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.html b/docs/pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.html index 759471db..7a248e83 100644 --- a/docs/pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.html +++ b/docs/pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.neb.tests.test_io.html b/docs/pymatgen.analysis.diffusion.neb.tests.test_io.html index 77b0748b..2b088b7e 100644 --- a/docs/pymatgen.analysis.diffusion.neb.tests.test_io.html +++ b/docs/pymatgen.analysis.diffusion.neb.tests.test_io.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.tests.test_io module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.tests.test_io module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.neb.tests.test_pathfinder.html b/docs/pymatgen.analysis.diffusion.neb.tests.test_pathfinder.html index ffafe3f1..ad001568 100644 --- a/docs/pymatgen.analysis.diffusion.neb.tests.test_pathfinder.html +++ b/docs/pymatgen.analysis.diffusion.neb.tests.test_pathfinder.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.neb.tests.test_pathfinder module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.neb.tests.test_pathfinder module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.tests.test_analyzer.html b/docs/pymatgen.analysis.diffusion.tests.test_analyzer.html new file mode 100644 index 00000000..b453cb39 --- /dev/null +++ b/docs/pymatgen.analysis.diffusion.tests.test_analyzer.html @@ -0,0 +1,147 @@ + + + + + + + + pymatgen.analysis.diffusion.tests.test_analyzer module — pymatgen-diffusion 2021.3.6 documentation + + + + + + + + + + + + + + + + + + + +
      +
      +
      +
      + +
      +

      pymatgen.analysis.diffusion.tests.test_analyzer module

      +
      +
      +class DiffusionAnalyzerTest(methodName='runTest')[source]
      +

      Bases: pymatgen.util.testing.PymatgenTest

      +

      Create an instance of the class that will use the named test +method when executed. Raises a ValueError if the instance does +not have a method with the specified name.

      +
      +
      +test_from_structure_NPT()[source]
      +
      + +
      +
      +test_init()[source]
      +
      + +
      +
      +test_init_npt()[source]
      +
      + +
      + +
      +
      +class FuncTest(methodName='runTest')[source]
      +

      Bases: pymatgen.util.testing.PymatgenTest

      +

      Create an instance of the class that will use the named test +method when executed. Raises a ValueError if the instance does +not have a method with the specified name.

      +
      +
      +test_fit_arrhenius()[source]
      +
      + +
      +
      +test_get_conversion_factor()[source]
      +
      + +
      + +
      + + +
      +
      +
      +
      + +
      +
      + + + + + + \ No newline at end of file diff --git a/docs/pymatgen.analysis.diffusion.utils.html b/docs/pymatgen.analysis.diffusion.utils.html index 851398aa..a380bdf6 100644 --- a/docs/pymatgen.analysis.diffusion.utils.html +++ b/docs/pymatgen.analysis.diffusion.utils.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.utils package — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.utils package — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.utils.maggma.html b/docs/pymatgen.analysis.diffusion.utils.maggma.html index 44922fa2..2a3721ac 100644 --- a/docs/pymatgen.analysis.diffusion.utils.maggma.html +++ b/docs/pymatgen.analysis.diffusion.utils.maggma.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.utils.maggma module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.utils.maggma module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.utils.parse_entries.html b/docs/pymatgen.analysis.diffusion.utils.parse_entries.html index df3b62a9..780dea89 100644 --- a/docs/pymatgen.analysis.diffusion.utils.parse_entries.html +++ b/docs/pymatgen.analysis.diffusion.utils.parse_entries.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.utils.parse_entries module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.utils.parse_entries module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.utils.supercells.html b/docs/pymatgen.analysis.diffusion.utils.supercells.html index 3acd6648..b2bb662e 100644 --- a/docs/pymatgen.analysis.diffusion.utils.supercells.html +++ b/docs/pymatgen.analysis.diffusion.utils.supercells.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.utils.supercells module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.utils.supercells module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.diffusion.utils.tests.test_parse_entries.html b/docs/pymatgen.analysis.diffusion.utils.tests.test_parse_entries.html index 7ef3dc91..6ea4c90e 100644 --- a/docs/pymatgen.analysis.diffusion.utils.tests.test_parse_entries.html +++ b/docs/pymatgen.analysis.diffusion.utils.tests.test_parse_entries.html @@ -5,7 +5,7 @@ - pymatgen.analysis.diffusion.utils.tests.test_parse_entries module — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis.diffusion.utils.tests.test_parse_entries module — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen.analysis.html b/docs/pymatgen.analysis.html index 97001ee4..fc9664ca 100644 --- a/docs/pymatgen.analysis.html +++ b/docs/pymatgen.analysis.html @@ -5,7 +5,7 @@ - pymatgen.analysis namespace — pymatgen-diffusion 2021.3.5 documentation + pymatgen.analysis namespace — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + @@ -97,6 +97,10 @@

      SubpackagesSubmodules +
    • Module contents
    • diff --git a/docs/pymatgen.html b/docs/pymatgen.html index e69ad9af..441b4f1b 100644 --- a/docs/pymatgen.html +++ b/docs/pymatgen.html @@ -5,7 +5,7 @@ - pymatgen namespace — pymatgen-diffusion 2021.3.5 documentation + pymatgen namespace — pymatgen-diffusion 2021.3.6 documentation @@ -40,7 +40,7 @@

      Navigation

    • previous |
    • - + diff --git a/docs/pymatgen_diffusion.aimd.html b/docs/pymatgen_diffusion.aimd.html index 9747cf96..987fac06 100644 --- a/docs/pymatgen_diffusion.aimd.html +++ b/docs/pymatgen_diffusion.aimd.html @@ -5,7 +5,7 @@ - pymatgen_diffusion.aimd package — pymatgen-diffusion 2021.3.5 documentation + pymatgen_diffusion.aimd package — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen_diffusion.html b/docs/pymatgen_diffusion.html index cf6fc766..50d0e337 100644 --- a/docs/pymatgen_diffusion.html +++ b/docs/pymatgen_diffusion.html @@ -5,7 +5,7 @@ - pymatgen_diffusion package — pymatgen-diffusion 2021.3.5 documentation + pymatgen_diffusion package — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/pymatgen_diffusion.neb.html b/docs/pymatgen_diffusion.neb.html index bc81e56f..6c11e809 100644 --- a/docs/pymatgen_diffusion.neb.html +++ b/docs/pymatgen_diffusion.neb.html @@ -5,7 +5,7 @@ - pymatgen_diffusion.neb package — pymatgen-diffusion 2021.3.5 documentation + pymatgen_diffusion.neb package — pymatgen-diffusion 2021.3.6 documentation @@ -36,7 +36,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/search.html b/docs/search.html index ec340bb7..9fd57748 100644 --- a/docs/search.html +++ b/docs/search.html @@ -5,7 +5,7 @@ - Search — pymatgen-diffusion 2021.3.5 documentation + Search — pymatgen-diffusion 2021.3.6 documentation @@ -42,7 +42,7 @@

      Navigation

    • modules |
    • - + diff --git a/docs/searchindex.js b/docs/searchindex.js index 49c93258..2efb71b6 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["_themes/README","change_log","index","modules","pymatgen","pymatgen.analysis","pymatgen.analysis.diffusion","pymatgen.analysis.diffusion.aimd","pymatgen.analysis.diffusion.aimd.clustering","pymatgen.analysis.diffusion.aimd.pathway","pymatgen.analysis.diffusion.aimd.rdf","pymatgen.analysis.diffusion.aimd.tests.test_clustering","pymatgen.analysis.diffusion.aimd.tests.test_pathway","pymatgen.analysis.diffusion.aimd.tests.test_rdf","pymatgen.analysis.diffusion.aimd.tests.test_van_hove","pymatgen.analysis.diffusion.aimd.van_hove","pymatgen.analysis.diffusion.neb","pymatgen.analysis.diffusion.neb.full_path_mapper","pymatgen.analysis.diffusion.neb.io","pymatgen.analysis.diffusion.neb.pathfinder","pymatgen.analysis.diffusion.neb.periodic_dijkstra","pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper","pymatgen.analysis.diffusion.neb.tests.test_io","pymatgen.analysis.diffusion.neb.tests.test_pathfinder","pymatgen.analysis.diffusion.utils","pymatgen.analysis.diffusion.utils.maggma","pymatgen.analysis.diffusion.utils.parse_entries","pymatgen.analysis.diffusion.utils.supercells","pymatgen.analysis.diffusion.utils.tests.test_parse_entries","pymatgen_diffusion","pymatgen_diffusion.aimd","pymatgen_diffusion.neb"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["_themes/README.rst","change_log.rst","index.rst","modules.rst","pymatgen.rst","pymatgen.analysis.rst","pymatgen.analysis.diffusion.rst","pymatgen.analysis.diffusion.aimd.rst","pymatgen.analysis.diffusion.aimd.clustering.rst","pymatgen.analysis.diffusion.aimd.pathway.rst","pymatgen.analysis.diffusion.aimd.rdf.rst","pymatgen.analysis.diffusion.aimd.tests.test_clustering.rst","pymatgen.analysis.diffusion.aimd.tests.test_pathway.rst","pymatgen.analysis.diffusion.aimd.tests.test_rdf.rst","pymatgen.analysis.diffusion.aimd.tests.test_van_hove.rst","pymatgen.analysis.diffusion.aimd.van_hove.rst","pymatgen.analysis.diffusion.neb.rst","pymatgen.analysis.diffusion.neb.full_path_mapper.rst","pymatgen.analysis.diffusion.neb.io.rst","pymatgen.analysis.diffusion.neb.pathfinder.rst","pymatgen.analysis.diffusion.neb.periodic_dijkstra.rst","pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.rst","pymatgen.analysis.diffusion.neb.tests.test_io.rst","pymatgen.analysis.diffusion.neb.tests.test_pathfinder.rst","pymatgen.analysis.diffusion.utils.rst","pymatgen.analysis.diffusion.utils.maggma.rst","pymatgen.analysis.diffusion.utils.parse_entries.rst","pymatgen.analysis.diffusion.utils.supercells.rst","pymatgen.analysis.diffusion.utils.tests.test_parse_entries.rst","pymatgen_diffusion.rst","pymatgen_diffusion.aimd.rst","pymatgen_diffusion.neb.rst"],objects:{"pymatgen.analysis":{diffusion:[6,0,0,"-"]},"pymatgen.analysis.diffusion":{aimd:[7,0,0,"-"],neb:[16,0,0,"-"],utils:[24,0,0,"-"]},"pymatgen.analysis.diffusion.aimd":{clustering:[8,0,0,"-"],pathway:[9,0,0,"-"],rdf:[10,0,0,"-"],van_hove:[15,0,0,"-"]},"pymatgen.analysis.diffusion.aimd.clustering":{Kmeans:[8,1,1,""],KmeansPBC:[8,1,1,""],get_random_centroid:[8,3,1,""],get_random_centroids:[8,3,1,""]},"pymatgen.analysis.diffusion.aimd.clustering.Kmeans":{cluster:[8,2,1,""],get_centroids:[8,2,1,""],get_labels:[8,2,1,""],should_stop:[8,2,1,""]},"pymatgen.analysis.diffusion.aimd.clustering.KmeansPBC":{get_centroids:[8,2,1,""],get_labels:[8,2,1,""],should_stop:[8,2,1,""]},"pymatgen.analysis.diffusion.aimd.pathway":{ProbabilityDensityAnalysis:[9,1,1,""],SiteOccupancyAnalyzer:[9,1,1,""]},"pymatgen.analysis.diffusion.aimd.pathway.ProbabilityDensityAnalysis":{from_diffusion_analyzer:[9,2,1,""],generate_stable_sites:[9,2,1,""],get_full_structure:[9,2,1,""],to_chgcar:[9,2,1,""]},"pymatgen.analysis.diffusion.aimd.pathway.SiteOccupancyAnalyzer":{coords_ref:[9,4,1,""],from_diffusion_analyzer:[9,2,1,""],get_average_site_occupancy:[9,2,1,""],nsites:[9,4,1,""],site_occ:[9,4,1,""],structure:[9,4,1,""]},"pymatgen.analysis.diffusion.aimd.rdf":{RadialDistributionFunction:[10,1,1,""],RadialDistributionFunctionFast:[10,1,1,""]},"pymatgen.analysis.diffusion.aimd.rdf.RadialDistributionFunction":{coordination_number:[10,2,1,""],export_rdf:[10,2,1,""],from_species:[10,2,1,""],get_rdf_plot:[10,2,1,""]},"pymatgen.analysis.diffusion.aimd.rdf.RadialDistributionFunctionFast":{get_coordination_number:[10,2,1,""],get_one_rdf:[10,2,1,""],get_rdf:[10,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests":{test_clustering:[11,0,0,"-"],test_pathway:[12,0,0,"-"],test_rdf:[13,0,0,"-"],test_van_hove:[14,0,0,"-"]},"pymatgen.analysis.diffusion.aimd.tests.test_clustering":{KmeansPBCTest:[11,1,1,""],KmeansTest:[11,1,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_clustering.KmeansPBCTest":{test_cluster:[11,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_clustering.KmeansTest":{test_cluster:[11,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_pathway":{ProbabilityDensityTest:[12,1,1,""],SiteOccupancyTest:[12,1,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_pathway.ProbabilityDensityTest":{test_generate_stable_sites:[12,2,1,""],test_probability:[12,2,1,""],test_probability_classmethod:[12,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_pathway.SiteOccupancyTest":{test_site_occupancy:[12,2,1,""],test_site_occupancy_classmethod:[12,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_rdf":{RDFTest:[13,1,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_rdf.RDFTest":{test_rdf:[13,2,1,""],test_rdf_coordination_number:[13,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_van_hove":{EvolutionAnalyzerTest:[14,1,1,""],RDFTest:[14,1,1,""],VanHoveTest:[14,1,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_van_hove.EvolutionAnalyzerTest":{test_get_df:[14,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_van_hove.RDFTest":{setUp:[14,2,1,""],test_raises_ValueError_if_reference_species_not_in_structure:[14,2,1,""],test_raises_ValueError_if_sigma_is_not_positive:[14,2,1,""],test_raises_ValueError_if_species_not_in_structure:[14,2,1,""],test_raises_valueerror_if_ngrid_is_less_than_2:[14,2,1,""],test_rdf:[14,2,1,""],test_rdf_coordination_number:[14,2,1,""],test_rdf_two_species_coordination_number:[14,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_van_hove.VanHoveTest":{test_van_hove:[14,2,1,""]},"pymatgen.analysis.diffusion.aimd.van_hove":{EvolutionAnalyzer:[15,1,1,""],VanHoveAnalysis:[15,1,1,""]},"pymatgen.analysis.diffusion.aimd.van_hove.EvolutionAnalyzer":{atom_dist:[15,2,1,""],get_df:[15,2,1,""],get_min_dist:[15,2,1,""],get_pairs:[15,2,1,""],plot_atomic_evolution:[15,2,1,""],plot_evolution_from_data:[15,2,1,""],plot_rdf_evolution:[15,2,1,""],rdf:[15,2,1,""]},"pymatgen.analysis.diffusion.aimd.van_hove.VanHoveAnalysis":{get_1d_plot:[15,2,1,""],get_3d_plot:[15,2,1,""]},"pymatgen.analysis.diffusion.neb":{full_path_mapper:[17,0,0,"-"],io:[18,0,0,"-"],pathfinder:[19,0,0,"-"],periodic_dijkstra:[20,0,0,"-"]},"pymatgen.analysis.diffusion.neb.full_path_mapper":{ChargeBarrierGraph:[17,1,1,""],MigrationGraph:[17,1,1,""],almost:[17,3,1,""],check_uc_hop:[17,3,1,""],generic_groupby:[17,3,1,""],get_hop_site_sequence:[17,3,1,""],get_only_sites_from_structure:[17,3,1,""],map_hop_sc2uc:[17,3,1,""]},"pymatgen.analysis.diffusion.neb.full_path_mapper.ChargeBarrierGraph":{get_least_chg_path:[17,2,1,""],get_summary_dict:[17,2,1,""],populate_edges_with_chg_density_info:[17,2,1,""]},"pymatgen.analysis.diffusion.neb.full_path_mapper.MigrationGraph":{add_data_to_similar_edges:[17,2,1,""],assign_cost_to_graph:[17,2,1,""],get_path:[17,2,1,""],get_structure_from_entries:[17,2,1,""],get_summary_dict:[17,2,1,""],host_structure:[17,2,1,""],only_sites:[17,2,1,""],symm_structure:[17,2,1,""],unique_hops:[17,2,1,""],with_base_structure:[17,2,1,""],with_distance:[17,2,1,""],with_local_env_strategy:[17,2,1,""]},"pymatgen.analysis.diffusion.neb.io":{MVLCINEBEndPointSet:[18,1,1,""],MVLCINEBSet:[18,1,1,""],get_endpoint_dist:[18,3,1,""],get_endpoints_from_index:[18,3,1,""]},"pymatgen.analysis.diffusion.neb.pathfinder":{DistinctPathFinder:[19,1,1,""],IDPPSolver:[19,1,1,""],MigrationHop:[19,1,1,""]},"pymatgen.analysis.diffusion.neb.pathfinder.DistinctPathFinder":{get_paths:[19,2,1,""],write_all_paths:[19,2,1,""]},"pymatgen.analysis.diffusion.neb.pathfinder.IDPPSolver":{from_endpoints:[19,2,1,""],get_unit_vector:[19,2,1,""],run:[19,2,1,""]},"pymatgen.analysis.diffusion.neb.pathfinder.MigrationHop":{get_sc_structures:[19,2,1,""],get_structures:[19,2,1,""],length:[19,2,1,""],write_path:[19,2,1,""]},"pymatgen.analysis.diffusion.neb.periodic_dijkstra":{get_optimal_pathway_rev:[20,3,1,""],periodic_dijkstra:[20,3,1,""],periodic_dijkstra_on_sgraph:[20,3,1,""]},"pymatgen.analysis.diffusion.neb.tests":{test_full_path_mapper:[21,0,0,"-"],test_io:[22,0,0,"-"],test_pathfinder:[23,0,0,"-"]},"pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper":{ChargeBarrierGraphTest:[21,1,1,""],MigrationGraphComplexTest:[21,1,1,""],MigrationGraphFromEntriesTest:[21,1,1,""],MigrationGraphSimpleTest:[21,1,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.ChargeBarrierGraphTest":{setUp:[21,2,1,""],test_get_summary_dict:[21,2,1,""],test_integration:[21,2,1,""],test_populate_edges_with_chg_density_info:[21,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.MigrationGraphComplexTest":{setUp:[21,2,1,""],test_add_data_to_similar_edges:[21,2,1,""],test_assign_cost_to_graph:[21,2,1,""],test_get_path:[21,2,1,""],test_group_and_label_hops:[21,2,1,""],test_not_matching_first:[21,2,1,""],test_periodic_dijkstra:[21,2,1,""],test_unique_hops_dict:[21,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.MigrationGraphFromEntriesTest":{setUp:[21,2,1,""],test_migration_graph_construction:[21,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.MigrationGraphSimpleTest":{setUp:[21,2,1,""],test_get_pos_and_migration_path:[21,2,1,""],test_get_summary_dict:[21,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_io":{MVLCINEBEndPointSetTest:[22,1,1,""],MVLCINEBSetTest:[22,1,1,""],UtilityTest:[22,1,1,""],get_path:[22,3,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_io.MVLCINEBEndPointSetTest":{endpoint:[22,4,1,""],test_incar:[22,2,1,""],test_incar_user_setting:[22,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_io.MVLCINEBSetTest":{structures:[22,4,1,""],test_incar:[22,2,1,""],test_incar_user_setting:[22,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_io.UtilityTest":{structure:[22,4,1,""],test_get_endpoint_dist:[22,2,1,""],test_get_endpoints_from_index:[22,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_pathfinder":{DistinctPathFinderTest:[23,1,1,""],IDPPSolverTest:[23,1,1,""],MigrationHopTest:[23,1,1,""],get_path:[23,3,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_pathfinder.DistinctPathFinderTest":{test_get_paths:[23,2,1,""],test_max_path_length:[23,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_pathfinder.IDPPSolverTest":{final_struct:[23,4,1,""],init_struct:[23,4,1,""],test_idpp:[23,2,1,""],test_idpp_from_ep:[23,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_pathfinder.MigrationHopTest":{setUp:[23,2,1,""],test_get_sc_structures:[23,2,1,""],test_get_start_end_structs_from_hop:[23,2,1,""],test_get_start_end_structs_from_hop_vac:[23,2,1,""]},"pymatgen.analysis.diffusion.utils":{parse_entries:[26,0,0,"-"],supercells:[27,0,0,"-"]},"pymatgen.analysis.diffusion.utils.parse_entries":{get_inserted_on_base:[26,3,1,""],get_insertion_energy:[26,3,1,""],get_matched_structure_mapping:[26,3,1,""],get_sym_migration_ion_sites:[26,3,1,""],process_entries:[26,3,1,""]},"pymatgen.analysis.diffusion.utils.supercells":{get_sc_fromstruct:[27,3,1,""],get_start_end_structures:[27,3,1,""]},"pymatgen.analysis.diffusion.utils.tests":{test_parse_entries:[28,0,0,"-"]},"pymatgen.analysis.diffusion.utils.tests.test_parse_entries":{ParseEntriesTest:[28,1,1,""]},"pymatgen.analysis.diffusion.utils.tests.test_parse_entries.ParseEntriesTest":{setUp:[28,2,1,""],test_filter_and_merge:[28,2,1,""],test_get_all_sym_sites:[28,2,1,""],test_get_inserted_on_base:[28,2,1,""],test_get_insertion_energy:[28,2,1,""],test_process_ents:[28,2,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function","4":"py:attribute"},terms:{"0000":[22,23],"0001":23,"0003":23,"0004":23,"0005":23,"0006":23,"0008":23,"0009":23,"001":19,"0023":23,"0028":23,"0030":23,"0031":23,"0032":23,"0036":23,"0043":23,"005":10,"0050":22,"0055":23,"0057":23,"0078":23,"0085":23,"0132":23,"0133":23,"0137":23,"0139":23,"0181":23,"0196":23,"0211":23,"0218":23,"0219":23,"0220":23,"0221":23,"0224":23,"0226":23,"0227":23,"0231":23,"0232":23,"0233":23,"0234":23,"0310":23,"0319":23,"0383":23,"0390":23,"0392":23,"0393":23,"0394":22,"0396":23,"0416":22,"0419":22,"0422":23,"0423":23,"0426":23,"0428":23,"0431":23,"0432":23,"0435":23,"0464":23,"0473":23,"0511":23,"0527":23,"0550":23,"0584":23,"0588":23,"0592":23,"0630":22,"0640":22,"0648":23,"0665":23,"0741":23,"0774":23,"0783517723596":23,"0784":23,"0799":22,"0844":23,"0846":23,"0868":22,"0893":22,"089343":22,"0910":2,"0919":23,"0924":23,"0929":22,"0943":23,"0947":23,"0948":23,"0950":23,"0951":23,"0952":23,"0953":23,"0954":23,"0968":23,"0972":23,"0973":23,"0975":23,"0976":23,"0990":23,"0991":23,"0994":23,"100":17,"1000":[8,19],"100000":17,"1001":23,"1009":23,"101":[10,15],"1020":23,"1024":23,"1029":23,"1041":23,"1043":23,"1046":22,"1049":23,"1050":23,"1054":23,"1058":23,"1066":23,"1082":23,"1098":23,"1106":23,"1114":23,"1115":23,"113":19,"1140":23,"1143":23,"1173":23,"1174":23,"1189":23,"1191":23,"1192":23,"1196":23,"1200":23,"1201":23,"1203":22,"1223":22,"1225":23,"1236":23,"1239":23,"1240":23,"1242":23,"1243":23,"1245":23,"1246":23,"1247":23,"1248":23,"1249":23,"1251":23,"1252":23,"1253":23,"1255":23,"1256":23,"1257":23,"1259":23,"1260":23,"1261":23,"1264":23,"1276":23,"1277":23,"1280":23,"1303":23,"1314":23,"131710473490111":22,"1318":23,"1320":23,"1329":22,"1370":23,"1373":23,"1374":23,"1381":23,"140":19,"1407":23,"14080369885537":22,"1410":23,"1412":23,"1421":[22,23],"1436976":2,"1437":23,"1439":23,"1441":23,"1447":23,"1448":23,"1454":23,"1455":23,"1457":22,"1459":23,"1578":23,"1615":23,"163":15,"1653":23,"1656":23,"1657":23,"1658":23,"1659":23,"1660":23,"1661":23,"1669":23,"1670":23,"1674":23,"173":15,"1787":22,"1817":23,"1821":23,"1822":23,"1847":23,"1874":23,"1889":23,"1893":23,"1914":23,"1918":23,"1957":23,"1961":23,"1978":23,"1981":23,"1999":23,"2000":19,"2004":23,"2009":23,"2014":19,"2015":[2,9,15],"2016":23,"2018":15,"2024":23,"2059":23,"2093":23,"2099":23,"2100":23,"2101":23,"2102":23,"2108":23,"2113":23,"2119":23,"2121":22,"2129":23,"2130":23,"2137":23,"2139":23,"214106":19,"2153":22,"2156":23,"2160":23,"2180":23,"2181":23,"2184":23,"2199":23,"2203":23,"2213":22,"2218449146199":22,"2219":23,"2220":23,"2224":23,"2228":23,"2243":23,"2266":23,"2268":23,"2270":23,"2272":23,"2274":23,"2278":23,"2279":23,"2281":23,"2283":23,"2296":23,"2300":23,"2339":23,"2347":23,"2372":22,"2376":23,"2392":23,"240":[19,27],"2449":23,"2450":23,"2499":23,"2500":[22,23],"2501":23,"2503":23,"2509":23,"2510":23,"2515":23,"2517":23,"2550":23,"2551":23,"2608":23,"2614":23,"2624":23,"2628":22,"2636":23,"2638":23,"2642":23,"2645":22,"2660":23,"2665":23,"2666":23,"2672":23,"2680":22,"2684":22,"2697":23,"2702":23,"2705":23,"2707":23,"2711":23,"2714":23,"2718":23,"2722":23,"2726":23,"2729":23,"2732":23,"2733":23,"2739":23,"2743":23,"2744":23,"2747":23,"2784":23,"2785":23,"2787":22,"2801":23,"2813":23,"2822":23,"2829":23,"2830":23,"2835":23,"2839":23,"2840":23,"2842":23,"2852":22,"2876":23,"2879":22,"2898":23,"2901":23,"2929":23,"2933":23,"2934":23,"2960":23,"2988":23,"2998":23,"2999":23,"2x2x2":17,"3034":23,"3108":23,"3110":23,"3116":23,"3136":22,"3154":[22,23],"3155":23,"3156":23,"3179":22,"3213":23,"3220":23,"3224":23,"3228":23,"3255":23,"3256":23,"3269":23,"3302":23,"3308":23,"3310":23,"3312":23,"3313":23,"3322":23,"3324":23,"3325":23,"3332":23,"3333":23,"3335":23,"3336":23,"3337":23,"3395":23,"3417":23,"3419":23,"3538":23,"3541":23,"3543":22,"3545":23,"3546":23,"3552":23,"3553":23,"3556":23,"3559":23,"3561":23,"3563":23,"3588":22,"3597":23,"3601":23,"3603":23,"3619":23,"3621":23,"3633":23,"3635":23,"3658":23,"3660":23,"3661":23,"3664":23,"3672":23,"3680":22,"3694":23,"3711":23,"3716":23,"3720":23,"3721":23,"3723":23,"3724":23,"3727":23,"3730":23,"3736":23,"3739":23,"3740":23,"3741":23,"3742":23,"3743":23,"3744":23,"3745":23,"3746":23,"3747":23,"3748":23,"3749":23,"3752":23,"3753":23,"3755":23,"3756":23,"3757":23,"3763":23,"3767":23,"3769":23,"3774":23,"3775":23,"3785":23,"3791":23,"3797":22,"3799":23,"3800":23,"3801":23,"3806":23,"3829":23,"3832":23,"3893":23,"3898":23,"3942":23,"3946":23,"3957":23,"3959":23,"3971":23,"3973":23,"3974":23,"3rp":9,"4006":23,"4023":23,"4024":23,"4026":23,"4027":23,"4028":23,"4034":23,"4035":23,"4036":23,"4047":23,"4049":23,"4061":23,"4062":23,"4075":22,"4086":23,"4087":23,"4088":23,"4090":23,"4112":23,"4114":23,"4115":23,"411723299877":23,"4132":22,"4168":23,"4175":23,"4189":23,"4190":23,"4201":22,"4202":23,"4207":23,"4208":23,"4215":23,"4217":23,"4220":23,"4221":23,"4228":23,"4229":23,"4230":23,"4252":23,"4253":23,"4299":23,"4302":23,"4360":22,"4370":22,"4398":23,"4400":23,"4436":23,"4439":23,"4444":23,"4458":23,"4459":23,"4461":23,"4483":23,"4487":23,"4491":22,"4493":23,"4499":23,"4506":22,"4522":23,"4530":23,"4539":22,"4547":23,"4553":23,"4574":[22,23],"4577":23,"4584":22,"4589":23,"4590":23,"4591":23,"4593":23,"4604":23,"4605":23,"4611":23,"4617":23,"4622":23,"4648":23,"4676":23,"4681":23,"4692":23,"4693":23,"4699":23,"4703":23,"4716":23,"4720":23,"4722":23,"4732":23,"4734":23,"4740":23,"4751":23,"4765":23,"4767":23,"4769":23,"4770":23,"4773":23,"4774":22,"4775":23,"47759961582329":23,"4779":23,"4782":23,"4786":23,"4792":23,"4821":23,"4825":23,"4835":23,"4861":23,"4863":23,"4867":23,"4868":23,"4871":23,"4873":23,"4884":23,"4889":23,"4923":23,"4947":23,"4948":22,"4950":22,"4966":23,"4973":[22,23],"4977":23,"4980":23,"4982":23,"4983":23,"4991":23,"4992":23,"4994":23,"4995":23,"4996":23,"4997":23,"5000":[22,23],"5002":23,"5004":23,"5010":23,"5011":23,"5018":23,"5019":23,"5020":23,"5023":23,"5033":23,"5040":23,"5041":23,"5046":23,"5049":23,"5050":[22,23],"5052":23,"5063":23,"5064":23,"5067":23,"5072":23,"5073":23,"5080":23,"5086":23,"510":22,"5102":23,"5103":23,"5110":23,"5112":23,"5118":23,"5120":23,"5124":23,"5125":23,"5129":23,"5132":23,"5133":23,"5134":23,"5135":23,"5136":23,"5145":23,"5155":23,"5167":23,"5169":23,"5185":23,"5190":23,"5201":23,"5202":23,"5214":23,"5215":23,"5219":23,"5220":23,"5224":23,"5225":23,"5229":23,"5232":23,"5235":23,"5240":23,"5249":23,"5256":23,"5258":23,"5259":23,"5260":23,"5261":23,"5263":23,"5264":23,"5266":23,"5268":23,"5272":23,"5281":23,"5282":23,"5288":23,"5290":23,"5295":23,"5319":23,"5328":23,"5329":23,"534":2,"5351":23,"5352":23,"5373":23,"5392":23,"5393":23,"5401":23,"5402":23,"5406":23,"5409":23,"5410":23,"5411":23,"5416":22,"5423":23,"5426":23,"5428":23,"5439":23,"5449":23,"5452":23,"5455":23,"5461":23,"5475":23,"5476":23,"5488":23,"5494":23,"5502":23,"5503":23,"5517":23,"5520":23,"5521":23,"5544":23,"5551":23,"5563":23,"5569":23,"5580":22,"5581":23,"5583":23,"5599":23,"5614":23,"5629":23,"5630":22,"5640":22,"5649":23,"5654":23,"5672":23,"5688":23,"5698":23,"5699":23,"5700":23,"5704":23,"5710":23,"5714":23,"5719":23,"5720":23,"5723":23,"5726":23,"5732":23,"5734":23,"5735":23,"5737":23,"5747":23,"5752":23,"5769":23,"5773":23,"5774":23,"5782":23,"5783":23,"5799":22,"5805":22,"5815":2,"5818":23,"582":22,"5836":23,"5860":23,"5868":22,"5895":22,"5951":23,"5953":23,"5958":23,"5964":23,"5965":23,"5966":23,"5974":[22,23],"5976":23,"5977":23,"6007":23,"6014":23,"6024":23,"6026":23,"6027":23,"6030":23,"6033":23,"6034":23,"6049":23,"6050":23,"6056":23,"6065":23,"6066":23,"6074":23,"6085":23,"6125":23,"6127":23,"6137":23,"6142":23,"6160":23,"6203":22,"6207":22,"6212":23,"6221":23,"6226":23,"6233":23,"6237":23,"6243":23,"6244":23,"6245":23,"6246":23,"6247":23,"6248":23,"6249":23,"6250":23,"6251":23,"6252":23,"6253":23,"6254":23,"6255":23,"6256":23,"6257":23,"6258":23,"6264":23,"6266":23,"6270":23,"6271":23,"6274":23,"6279":23,"6280":23,"6281":23,"6289":23,"6318":23,"6326":23,"6335":23,"6338":23,"6340":[22,23],"634014":22,"6342":22,"6375":22,"6433":23,"6438":23,"6439":23,"6442":23,"6443":23,"6454":23,"6455":23,"6456":23,"6457":[22,23],"6458":23,"6461":23,"6462":23,"6490":23,"6492":23,"6581":22,"6582":23,"6664":23,"6665":23,"6667":23,"6668":23,"6675":23,"6676":23,"6678":23,"6685":23,"6687":23,"6688":23,"6690":23,"6691":23,"6692":23,"6727":23,"6732":23,"6738":23,"6740":23,"6744":23,"6745":23,"6778":23,"6824":23,"6826":23,"6832":23,"6840":23,"6853":23,"6862":23,"6865":22,"6869":23,"6876":23,"6906":23,"6907":23,"6956":22,"7097":23,"7098":23,"7099":23,"7109":23,"7118":23,"7119":22,"7121":22,"7158":23,"7160":23,"7161":23,"7170":23,"7178":23,"7181":23,"7191":23,"7198":22,"7210":23,"7211":23,"7213":22,"7234":22,"7239":23,"7242":23,"7246":23,"7248":23,"7251":23,"7255":23,"7264":23,"7266":23,"7271":23,"7275":23,"7278":23,"7280":23,"7282":23,"7285":23,"7286":23,"7291":23,"7293":23,"7298":23,"7303":23,"7310":23,"7329":23,"7330":23,"7343":23,"7345":23,"7352":23,"7356":23,"7357":23,"7364":23,"7365":23,"7366":22,"7367":23,"7372":[22,23],"7373":23,"7374":23,"7377":23,"7378":23,"7379":23,"7383":23,"7385":23,"7386":23,"7387":[22,23],"7388":23,"7390":23,"7393":23,"7394":23,"7395":23,"7396":23,"7397":23,"7426":23,"7432":23,"7437":23,"7446":23,"7462":23,"7463":23,"7468":23,"7475":23,"7483":23,"7488":23,"7490":23,"7491":23,"7492":23,"7497":23,"7500":[22,23],"7504":23,"7514":23,"7516":23,"7520":23,"7525":23,"7555":23,"7559":23,"7574":23,"7579":23,"7600":22,"7625":23,"7626":23,"7627":23,"7628":22,"7632":23,"7633":23,"7637":23,"7645":23,"7657":23,"7659":23,"7673":23,"7719":23,"7722":23,"7725":23,"7727":23,"7728":23,"7733":22,"7734":23,"7749":23,"7754":23,"7758":23,"7761":23,"7779":23,"7780":23,"7781":23,"7782":23,"7787":22,"7791":23,"7799":23,"7816":23,"7819":23,"7820":23,"7823":23,"7835":22,"7874":23,"7879":22,"7891":23,"7901":23,"7902":23,"7910":22,"7949":23,"7964":23,"7965":23,"7982":23,"7985":22,"7994":22,"7998":23,"8000":23,"8020":23,"8049":23,"8051":23,"8052":23,"8123":23,"8141":23,"8148":23,"815000056846058":22,"8169":23,"8172":23,"8187":23,"8270":22,"8318":[9,15],"8325":[9,15],"8326":23,"8330":23,"8331":23,"8339":23,"8340":23,"8341":23,"8342":23,"8343":23,"8344":23,"8347":23,"8358":23,"8363":23,"8370":22,"8538":23,"8543":[22,23],"8544":23,"8545":23,"8546":23,"8557":23,"8558":23,"8561":23,"8562":23,"8567":23,"858":2,"8601":22,"8611":23,"8612":23,"8626":22,"8693444977544":23,"8719":23,"8720":23,"8726":23,"8729":23,"8730":23,"8734":23,"8736":23,"8743":23,"8744":23,"8745":23,"8747":23,"8749":23,"8750":23,"8751":23,"8752":23,"8753":23,"8754":23,"8755":23,"8756":23,"8757":23,"8758":23,"8761":23,"8764":23,"8774":23,"8779":23,"8788":23,"8797":22,"8840":23,"8875":23,"8934":23,"8935":23,"8944":23,"8950":23,"8951":23,"8955":22,"8966":23,"8967":23,"8973":23,"8976":23,"9000":22,"9009":23,"9010":23,"9035":22,"9046":23,"9047":23,"9048":23,"9049":23,"9050":23,"9053":23,"9057":23,"9132":22,"9201":22,"9205":23,"92093":2,"9216":23,"9219":23,"9230":23,"9231":23,"9239":22,"9354":23,"9360":22,"9370":22,"9383":23,"9385":23,"9397":23,"9414":23,"9418":23,"9423":23,"9424":23,"9425":23,"9431":23,"9463":22,"9469":23,"9495":23,"9500":2,"9506":23,"9512":23,"9522":23,"9525":23,"9528":23,"9564":23,"9568":23,"9569":[22,23],"9571":23,"9572":23,"9574":23,"9577":23,"9578":23,"9584":22,"9587":23,"9595":23,"9598":23,"9599":23,"9607":23,"9618":23,"9624":23,"9630":23,"9635":23,"9656":23,"9658":23,"9659":23,"9673":23,"9678":23,"9681":23,"9718":23,"9719":23,"9751":23,"9756":23,"9768":23,"9769":23,"9771":23,"9774":23,"9780":23,"9781":23,"9785":23,"9798":23,"9815":23,"9817":23,"9818":23,"9825":23,"9865":23,"9868":23,"9871":23,"9880":23,"9882":23,"9884":23,"9885":23,"9887":23,"9888":23,"9889":23,"9893":22,"9896":23,"9897":23,"9898":23,"9900":23,"9901":19,"9902":23,"9903":23,"9909":23,"9911":23,"9920":23,"9925":22,"9926":23,"9927":23,"9929":23,"9950":22,"9985":22,"9989":23,"9990":23,"9991":23,"9992":23,"9995":23,"9996":23,"9997":23,"9999":23,"9999995733517":22,"case":[11,12,13,14,17,19,21,22,23,28],"class":[2,8,9,10,11,12,13,14,15,17,18,19,20,21,22,23,28],"default":[10,15,17,19,20],"final":[8,19,27],"float":[9,10,15,17,19,26,27],"function":[9,10,15,17,19,20,26,27],"import":[1,8],"int":[8,10,15,17,18,19,20,27],"long":21,"new":[8,26],"public":2,"return":[8,9,10,15,17,18,19,20,26,27],"static":[8,15,17,19],"true":[10,17,19,21,26],"try":27,"while":19,AND:2,ARE:2,BUT:2,FOR:2,For:[2,8,17,19,26],HAS:2,ITS:2,NOT:2,N_s:9,Pls:2,SUCH:2,THE:2,The:[0,2,8,9,10,15,17,19,20,26,27],USE:2,Using:17,_subplot:15,_theme:0,abc:[22,23],abl:27,about:19,abov:[2,9],absolut:19,abspath:0,accompani:2,account:17,accur:[17,26],across:20,adapt:8,add:[0,2,17],add_data_to_similar_edg:17,add_kei:17,added_kei:17,adding:17,addit:[15,17,20],addition:26,addon:0,adjac:[10,15],advis:2,agreement:2,aimd:[5,6,29],algo:[8,19],algorithm:[8,9,19],all:[2,9,10,15,17,19,20,21,26,27],allow:[10,19,27],almost:17,along:[10,15],also:[0,26],altern:0,alwai:[2,10,15,19,20,21],amount:17,analys:2,analysi:[1,2],analyz:[9,15],angl:[17,22,23,26],angle_tol:[17,26],angstrom:[9,10,15,17,19],ani:[2,15,17],appear:2,append:0,appli:26,approach:19,arg:18,argument:15,aris:2,arrai:[8,9,10,15,17],ask:17,assign:17,assign_cost_to_graph:17,associ:[9,10,15,19],assum:[10,17,18,19,26],atom:[8,10,15,19,27],atom_dist:15,attribut:9,averag:[9,10,15],avg_nstep:15,awai:20,axes:[10,15],axessubplot:15,back:2,bar:15,base:[8,9,10,11,12,13,14,15,17,18,19,21,22,23,26,28],base_:26,base_entri:[17,26],base_struct:[26,27],base_struct_entri:26,base_structur:17,basi:2,basic:17,batteri:15,becaus:19,been:2,befor:[14,21,23,28],best:[20,27],best_an:20,better:19,between:[9,17,18,19],bigger:26,binari:2,bool:[10,17,19,27],both:[17,19],boundari:[2,8,18],built:17,busi:2,calc:27,calcul:[10,15,16,17,18,19,26,27],california:2,call:[19,20],callabl:[15,17,20],can:[0,8,9,15,17,19,20,21,26,27],cap:27,cation:[17,26],caus:2,cb_label:15,cell:[10,15,17,20,21,26,27],cell_rang:[10,15],center:10,centroid:8,chang:[8,19],character:15,charg:[17,21],chargebarriergraph:17,chargebarriergraphtest:21,check:[0,2,8,19,20,21],check_uc_hop:17,chem:[9,15,19],chen:15,chgcar:9,choos:15,chose:8,chosen:19,chu:[9,15],cite:[9,15],classmethod:[9,10,17,19],cleanup:1,close:27,closer:9,closest:8,cluster:[2,5,6,7,9,29],cmap:15,cmocean:15,code:[2,17],color:15,color_plaett:15,column:15,combin:26,commerci:2,comp:17,compar:17,compat:1,complet:19,compon:[9,19],composit:10,compris:19,comput:[9,10,15],computed_entri:[17,26],computedentri:[17,26],computedstructureentri:[17,26],concentr:15,condit:[2,8,18],conduct:[9,15],conductor:[9,15],conf:0,configur:27,connect:17,consecut:19,consequenti:2,consid:[2,9,15],constant:19,construct:[17,19,27],constructur:17,contact:2,contain:[0,17,19,26],content:[0,5],contract:2,contributor:2,conveni:19,converg:9,coordin:[8,9,10],coordination_numb:10,coords_ref:9,copi:[2,17,26],core:[10,15,17,19,26,27],correct:15,correl:[15,19],cost:[17,20],cost_kei:17,count:15,cover:21,cpu:10,creat:[9,11,12,13,14,21,22,23,26,27,28],crystal:9,csv:[10,15],cubic:[9,15,27],cubicsupercelltransform:27,current:[10,17],cutoff:[9,17,19],d_cutoff:9,damag:2,dat:10,data:[2,8,10,15,17],databas:17,datafram:15,dataset:8,debug:27,decor:[17,26],decreas:27,defin:[15,17,26],deng:[9,15],densiti:[2,9,15,17,21],depend:19,deriv:2,describ:17,design:2,detail:[2,19],determin:[8,9,17,19],develop:2,diagonali:21,dict:[17,20,26],dictionari:[17,20,26],differ:17,diffus:[1,2,5],diffusion_analyz:[9,15],diffusionanalyz:[2,9,15],dijkstra:20,direct:[2,10,15],dirnam:[22,23],disclaim:2,displac:19,dist:18,distanc:[8,9,15,18,19],distinct:[15,19],distinctpathfind:19,distinctpathfindertest:23,distribut:[2,9,10,15],dmref:2,doc:[0,2],document:0,doe:[2,11,12,13,14,17,19,21,22,23,28],don:27,dopant:[9,15],driv:0,drive:2,dure:[15,19],each:[2,8,17,19,20,26],easi:19,easier:19,edg:[17,20],edu:[2,18],educ:2,either:[17,19],element:[8,10,15,18],empti:[8,27],end:[2,9,18,19,21],endors:2,endpoint:[17,18,19,22],energi:[9,17,19,26],engin:2,enhanc:[2,9,15],enough:[20,21],ensembl:10,entir:[21,26],entri:[17,26],environ:17,ep_0:18,ep_1:18,equal:17,equilval:17,equival:[17,19,26],error:2,esit:[19,27],even:2,event:[2,17,27],evolut:15,evolutionanalyz:15,evolutionanalyzertest:14,exactli:17,exampl:8,exclus:2,execut:[11,12,13,14,21,22,23,28],exemplari:2,exercis:[14,21,23,28],exist:[0,19],export_rdf:10,express:2,extens:10,extern:15,extra:15,extract:2,extrem:19,fals:[10,17,19,27],far:8,fast:[9,10],faster:27,featur:8,fee:2,fiel:18,field:[17,20],figsiz:15,file:[2,10,19],filenam:[9,10,19],filter:17,final_struct:23,find:[2,17,19,20,27],first:[15,18,19],fit:2,fixtur:[14,21,23,28],flask:0,flip:17,fname:19,folder:0,follow:[0,2,9,15,20],forc:19,fork:2,form:[2,17,19],format:[9,10,17],formula:19,found:20,foundat:2,fpm_uc:17,fraction:[8,9,17,26],frame:15,framework:17,free:2,fro:[17,26],from:[2,8,9,15,17,18,20,26,27],from_diffusion_analyz:9,from_endpoint:19,from_speci:10,full:26,full_path_mapp:[5,6,16,29],full_structur:17,fulli:19,func:15,functiontyp:15,fund:2,further:9,futur:[2,15],gaussian:[10,15],gener:[8,9,17,18,19,27],generate_stable_sit:9,generic_groupbi:17,geometr:[8,27],get:[9,10,15,17,19,26],get_1d_plot:15,get_3d_plot:15,get_atomic_distribut:15,get_average_site_occup:9,get_centroid:8,get_coordination_numb:10,get_df:15,get_endpoint_dist:18,get_endpoints_from_index:18,get_full_structur:9,get_hop_site_sequ:17,get_inserted_on_bas:26,get_insertion_energi:26,get_label:8,get_least_chg_path:17,get_matched_structure_map:26,get_min_dist:15,get_one_rdf:10,get_only_sites_from_structur:17,get_optimal_pathway_rev:20,get_pair:15,get_path:[17,19,22,23],get_random_centroid:8,get_rdf:10,get_rdf_plot:10,get_sc_fromstruct:27,get_sc_structur:19,get_start_end_structur:27,get_structur:19,get_structure_from_entri:17,get_summary_dict:17,get_sym_migration_ion_sit:26,get_unit_vector:19,gilman:2,git:0,give:27,given:[9,10,15,17,19,20,26],good:[2,20],grant:2,graph:[17,20,21],grid:[9,10,15],group:[17,18,21,26],gtol:19,guess:[8,19],guid:0,halv:[17,26],handl:17,has:[9,17],have:[8,11,12,13,14,17,20,21,22,23,28],heap:20,heat:15,heavili:2,henkelman:[18,19],here:17,herebi:2,hereund:2,hierach:9,higher:9,his:0,holder:2,hook:[14,21,23,28],hop:[17,21,27],hop_dist:17,hop_list:17,host:[17,19,26],host_structur:17,hove:[2,15],how:20,howev:2,html_theme:0,html_theme_path:0,http:18,hundr:15,hydrogen:19,idea:17,idpp:[1,2,19],idpp_kwarg:19,idppsolv:19,idppsolvertest:23,ignor:15,imag:[10,15,17,19,20],img:17,implement:[1,8,10,15],impli:2,improv:19,incar:15,incident:2,includ:[1,2,9,10,15,19],increas:19,index:[2,8,10,15,17,20],indic:[9,10,15,17,18,19,20],indirect:2,inequilval:21,info:19,inform:17,init_struct:23,initi:[8,9,10,15,19,27],initial_centroid:8,inlcud:16,input:[15,17,18,19,26],insert:[17,26],inserted_:26,inserted_entri:[17,26],inserted_struct:26,insertion_energi:17,instanc:[11,12,13,14,21,22,23,26,28],instead:[1,19],int_:9,intend:0,intercal:19,intercol:17,interest:[9,10,15],interfaci:15,interpol:19,interrupt:2,interstiti:[9,15,19],interv:[9,15],invent:2,invers:17,ion:[15,17,19,26],ionic:9,is_averag:10,isit:[19,27],item:17,iter:[8,19,20,27],its:2,jimag:20,jolla:2,json:17,just:[10,19],kei:[17,20],kenneth:0,keyword:18,kind:26,kmean:8,kmeanspbc:8,kmeanspbctest:11,kmeanstest:11,known:19,kr_small:0,kwarg:[15,17,18,19],lab:2,label:[8,10,15,17,21],lambda:20,landscap:9,larg:0,later:17,lattic:[8,17,19,22,23,27],leaf:20,leaf_nod:20,least:17,legend:10,lenght:17,length:[17,19,21,26,27],less:[15,27],li3fe4p4o16:19,li4fe4p4o16:19,liabil:2,liabl:2,librari:0,life4p4o16:19,like:[2,8,17,19],limit:[2,10,20],lin:15,linear:19,linearsegmentedcolormap:15,linspac:10,list:[2,8,9,10,15,17,18,19,26,27],list_in:17,listedcolormap:15,loc_peak:10,local:17,local_env:17,loss:2,lost:2,low:9,lowest:20,ltol:[17,26],m_path:17,maggma:[5,6,24],mai:[2,9],mail:2,mainli:19,mainten:2,make:[2,8,19,21],mani:[20,26,27],manipul:2,manner:19,map:[15,17,26],map_hop_sc2uc:17,match:[17,19,26],mater:[9,15],materi:[2,17],matplotlib:15,matrix:[19,26],mavrl:18,max_atom:[19,27],max_disp:19,max_dist:17,max_imag:20,max_iter:8,max_path_length:19,max_val:17,maxim:10,maximum:[8,10,15,17,19,27],maxit:19,mean:[2,8,17,19],mechan:19,merchant:2,met:2,metal:[17,26],metast:17,method:[9,10,11,12,13,14,19,21,22,23,28],methodnam:[11,12,13,14,21,22,23,28],metric:8,might:[15,17,20],migraiton:17,migrat:[2,17,19,26,27],migrating_ion:26,migrating_ion_entri:[17,26],migrating_speci:[17,19],migration_graph:17,migrationgraph:[17,26],migrationgraphcomplextest:21,migrationgraphfromentriestest:21,migrationgraphsimpletest:21,migrationhop:[17,19,21],migrationhoptest:23,migratrion:17,min:[17,19],min_atom:[19,27],min_length:[19,27],minim:[10,19],minimum:[10,15,19,27],miss:20,mit:2,mitnebset:18,mitrelaxset:18,mitsuhiko:0,mn6o5f7:21,mobil:17,mode:[15,17,19],modif:[2,18],modifi:2,modul:[2,5],moment:15,monti:17,more:[2,9,15,17,19,26],most:0,move:[19,20],msonabl:17,much:27,must:[2,26],mvlcinebendpointset:18,mvlcinebendpointsettest:22,mvlcinebset:18,mvlcinebsettest:22,mxn:8,n_job:10,na3ps4:[9,15],name:[2,11,12,13,14,17,19,21,22,23,26,28],namespac:[1,2,3],nation:2,ndarrai:8,nearest:9,nearneighbor:17,neb:[1,5,6,27,29],nebpath:19,need:[17,19,26],neglig:2,neighbor:17,neither:2,nest:9,network:[17,19],networkx:20,ngrid:[10,15],nimag:19,nion:9,node:[17,20],non:17,none:[8,10,15,17,19,20],nor:2,note:[2,9,15,18,19],notic:2,now:[1,17],nsite:9,ntimestep:9,number:[8,9,10,15,19,26,27],numpi:[9,10],nx3:9,object:[8,9,10,15,17,18,19,20,21,26,27],oblig:2,obtain:[2,9,15,17,19,26,27],occup:9,occupi:17,offic:2,often:20,old:8,old_centroid:8,omega:9,one:[0,10,15,18,26],ong:[9,15],onli:[15,17,19,26],only_single_cat:[17,26],only_sit:17,onto:[17,26],oper:[2,17],optim:20,option:[10,15,17,20,26],other:[2,15,17,19],otherwis:[2,10],out:[0,2,26],output:[10,17],outsid:[17,22],over:[9,10,27],p_ratio:9,packag:[1,2,5],page:[0,2],pair:[10,15,19,20,26],panda:15,paper:[9,15],paragraph:2,param:[9,17,18,19,26],paramet:[8,9,10,15,17,18,19,20,26,27],parent:20,pars:[15,17],parse_entri:[5,6,24],parseentriestest:28,part:15,parti:2,particular:[2,15],pass:17,passthrough:19,path:[0,2,17,19,20,26],path_par:20,path_str:[22,23],pathfind:[5,6,16,17,29],pathwai:[5,6,7,16,17,20,29],pbc:8,peak:10,per:19,perc_mod:19,percol:[17,19],perfect:18,perform:19,period:[2,8,18,20],periodic_dijkstra:[5,6,16,29],periodic_dijkstra_on_sgraph:20,periodicsit:[22,23,27],permiss:2,permit:2,phase:[17,26],phy:19,placehold:19,pleas:[2,9,15,19],plot:[10,15],plot_atomic_evolut:15,plot_evolution_from_data:15,plot_rdf_evolut:15,pmg:27,pmg_structur:[9,10,19],point:[8,9,10,15,18,19,20,21],popul:[17,20,21],populate_edges_with_chg_density_info:17,posit:[8,19,26],possibl:[2,17,19,27],potenti:19,potential_data_kei:17,potential_field:17,potim:15,precis:[17,19],preliminari:2,present:[17,27],principl:15,print:17,prior:2,probabilitydensityanalysi:9,probabilitydensitytest:12,probabl:[2,9],probe:15,process:[10,15,19,26],process_entri:26,procur:2,product:[2,17],profit:2,program:2,progress:2,project:0,promot:2,properti:[10,17,19],provid:[2,8,19,26],pull:2,purpos:2,put:0,py3k:1,pymatgen:[1,2],pymatgen_diffus:1,pymatgentest:23,pypi:1,python:17,quantit:15,quickli:20,radial:[10,15],radialdistributionfunct:10,radialdistributionfunctionfast:10,radiu:[10,17,21],rais:[11,12,13,14,21,22,23,28],random:8,randomli:8,rang:[10,15],rank:26,rdf:[5,6,7,15,29],rdftest:[13,14],reaction:15,read:[17,18],reason:2,recommend:15,redistribut:2,reduc:15,ref_speci:10,refer:[2,9,10,17,19],reference_indic:10,reference_speci:[10,15],regent:2,regular:19,reitz:0,relat:0,relax:[18,19],releas:[1,2],relev:2,reli:2,remov:19,repositori:[0,2],repres:19,represent:[17,27],reproduc:2,request:2,requir:[15,18],research:2,reserv:2,resolut:15,retain:2,revolution:2,right:2,rmax:[10,15],rmin:10,role:[9,15],run:[8,10,19],runtest:[11,12,13,14,21,22,23,28],same:[9,10,17,19,21,26],san:26,saniti:21,save:[9,15,17],save_csv:15,sc_hop:17,sc_m:26,sc_mat:27,scheme:9,scienc:2,scientif:2,seaborn:15,search:[2,20],second:18,see:[17,18,19],select:[9,15],self:15,send:2,sequenc:[9,17],servic:2,set1:15,set:[9,10,14,15,17,18,19,20,21,23,28],setup:[14,21,23,28],sgraph:20,shall:2,shallow:9,shortest:[9,15],should:[1,8,9,17,21],should_stop:8,sigma:[10,15],similar:21,similiarli:21,simpl:8,simul:[7,9,10,15,19,27],sinc:[20,26],singl:[10,17,26],site:[9,17,18,19,21,26,27],site_index:20,site_indic:18,site_occ:9,siteoccupancyanalyz:9,siteoccupancytest:12,size:[19,26,27],skip:15,slow:[9,15],slowli:9,small:0,smaller:26,smallest:[19,27],smear:[10,15],smidstrup:19,smooth:10,sodium:15,softwar:[2,19],solid:15,solver:[1,19],some:[15,19,26],sort_tol:19,sourc:[2,8,9,10,11,12,13,14,15,17,18,19,20,21,22,23,26,27,28],space:26,spacegroupanalyz:[17,26],speci:[9,10,15,17,19,26],special:2,specif:[2,17],specifi:[11,12,13,14,15,17,21,22,23,28],spectrum:15,spring:19,spring_const:19,squar:8,stabl:9,stable_sit:9,standard:[0,19],start:[17,19,27],start_u:17,state:15,statist:15,step:[9,15,19],step_siz:19,step_skip:15,stol:[17,26],stop:[8,20],store:9,str:[9,10,15,17,19,20,26],strategi:17,strict:[2,17,26],string:[10,15,17,19],struc_sc:27,structur:[2,9,10,15,17,18,19,22,23,26,27],structure_is_bas:17,structure_match:26,structuregraph:[17,20],structurematch:[17,26],submodul:[0,5,6,29],subsequ:19,subset:[9,15],substitut:2,sum:8,summari:[22,23],supercel:[5,6,10,15,17,19,24,26],superion:[9,15],suppli:[2,8],support:[2,10,18,19],sure:21,symbol:[10,15],symm_structur:[17,19],symmetr:[17,19],symmetri:[17,19,26],symmetrizedstructur:19,symprec:[17,19,26],sys:0,tabl:15,take:[10,26],tang:15,target:20,target_label:17,target_reach:20,technolog:2,term:[2,9],termin:27,test:18,test_add_data_to_similar_edg:21,test_assign_cost_to_graph:21,test_filter_and_merg:28,test_generate_stable_sit:12,test_get_all_sym_sit:28,test_get_df:14,test_get_endpoint_dist:22,test_get_endpoints_from_index:22,test_get_inserted_on_bas:28,test_get_insertion_energi:28,test_get_path:[21,23],test_get_pos_and_migration_path:21,test_get_sc_structur:23,test_get_start_end_structs_from_hop:23,test_get_start_end_structs_from_hop_vac:23,test_get_summary_dict:21,test_group_and_label_hop:21,test_idpp:23,test_idpp_from_ep:23,test_incar:22,test_incar_user_set:22,test_integr:21,test_max_path_length:23,test_migration_graph_construct:21,test_not_matching_first:21,test_periodic_dijkstra:21,test_populate_edges_with_chg_density_info:21,test_prob:12,test_probability_classmethod:12,test_process_:28,test_raises_valueerror_if_ngrid_is_less_than_2:14,test_raises_valueerror_if_reference_species_not_in_structur:14,test_raises_valueerror_if_sigma_is_not_posit:14,test_raises_valueerror_if_species_not_in_structur:14,test_rdf:14,test_rdf_coordination_numb:[13,14],test_rdf_two_species_coordination_numb:14,test_site_occup:12,test_site_occupancy_classmethod:12,test_unique_hops_dict:21,testcas:[11,12,13,14,21,22,23,28],than:[9,15,26],theme:0,theori:[2,18],thermal:15,thi:[0,2,8,9,10,15,18,19,20,21],those:[15,17,19],three:[2,10,15],threshold:9,through:[17,19],throughout:15,thu:8,time:[9,15],time_step:15,to_chgcar:9,to_jimag:20,togeth:17,tol:[15,19],toler:[17,19,26],tool:[1,16],top:20,tort:2,total:[19,26],trajectori:[2,8,9],transfer:2,transform:27,translat:[10,15,17,26],tube:[17,21],tube_radiu:17,tupl:[10,15,19,20,27],turn:21,two:[9,18,19],type:[8,9,15,17,18,19,20,26,27],uc_hop:17,ucsd:2,under:[2,17],understand:2,uniform:9,uninterrupt:2,union:[10,15,17,27],uniqu:[17,21],unique_hop:17,unit:[15,17,19,21,22,27],unitcel:27,unittest:[11,12,13,14,21,22,23,28],univers:2,unsort:17,until:[17,19,27],updat:2,use:[0,2,9,11,12,13,14,15,17,21,22,23,26,28],use_strict_tol:[17,26],used:[0,2,8,9,15,17,19,20,26],useful:19,user:2,uses:[0,17],using:[2,9,10,15,17,18,19],usual:19,utexa:18,util:[5,6,23],utilitytest:22,vac_mod:[17,19,27],vacanc:[17,19],valid:21,valu:[10,17,19],valueerror:[11,12,13,14,21,22,23,28],van:[2,15],van_hov:[5,6,7,29],vanhoveanalysi:15,vanhovetest:14,vasp:[9,17,18],vaspinputset:18,vec:19,vector:[10,15,17,19,27],veri:[0,15,20],version:8,vesta:[9,19],via:[1,19],view:19,virtual:[2,19],visual:[9,19],volum:[22,23],volumetricdata:17,vtst:18,vtsttool:18,wai:[2,20,21],wang:15,want:19,warrant:2,warranti:2,water:10,weight:20,welcom:2,well:8,were:19,when:[11,12,13,14,17,21,22,23,28],where:[8,9,20,26],whether:[2,10,17],which:[9,15,17,19],window:15,with_base_structur:17,with_dist:17,with_local_env_strategi:17,within:[15,17],without:[2,20],work:[2,8,17,19,26],working_ion:26,would:[15,19],write:[18,19],write_all_path:19,write_path:19,written:[2,10],x_label:15,xlim:10,yield:19,ylim:10,you:[0,2,8,9,15,17,19],your:0,zero:[10,15],zheng:15,zhu:[9,15]},titles:["krTheme Sphinx Style","Change Log","Introduction","pymatgen","pymatgen namespace","pymatgen.analysis namespace","pymatgen.analysis.diffusion package","pymatgen.analysis.diffusion.aimd package","pymatgen.analysis.diffusion.aimd.clustering module","pymatgen.analysis.diffusion.aimd.pathway module","pymatgen.analysis.diffusion.aimd.rdf module","pymatgen.analysis.diffusion.aimd.tests.test_clustering module","pymatgen.analysis.diffusion.aimd.tests.test_pathway module","pymatgen.analysis.diffusion.aimd.tests.test_rdf module","pymatgen.analysis.diffusion.aimd.tests.test_van_hove module","pymatgen.analysis.diffusion.aimd.van_hove module","pymatgen.analysis.diffusion.neb package","pymatgen.analysis.diffusion.neb.full_path_mapper module","pymatgen.analysis.diffusion.neb.io module","pymatgen.analysis.diffusion.neb.pathfinder module","pymatgen.analysis.diffusion.neb.periodic_dijkstra module","pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper module","pymatgen.analysis.diffusion.neb.tests.test_io module","pymatgen.analysis.diffusion.neb.tests.test_pathfinder module","pymatgen.analysis.diffusion.utils package","pymatgen.analysis.diffusion.utils.maggma module","pymatgen.analysis.diffusion.utils.parse_entries module","pymatgen.analysis.diffusion.utils.supercells module","pymatgen.analysis.diffusion.utils.tests.test_parse_entries module","pymatgen_diffusion package","pymatgen_diffusion.aimd package","pymatgen_diffusion.neb package"],titleterms:{acknowledg:2,aimd:[7,8,9,10,11,12,13,14,15,30],analysi:[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28],api:2,chang:[1,2],cite:2,cluster:[8,30],content:[6,7,16,24,29,30,31],contribut:2,copyright:2,diffus:[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28],document:2,exhaust:2,featur:2,full_path_mapp:[17,31],indic:2,introduct:2,krtheme:0,licens:2,log:[1,2],maggma:25,modul:[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31],namespac:[4,5],neb:[16,17,18,19,20,21,22,23,31],non:2,our:2,packag:[6,7,16,24,29,30,31],parse_entri:26,pathfind:[19,31],pathwai:[9,30],periodic_dijkstra:[20,31],polici:2,pymatgen:[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28],pymatgen_diffus:[29,30,31],rdf:[10,30],sphinx:0,style:0,submodul:[7,16,24,30,31],subpackag:[5,6,7,16,24,29,30,31],supercel:27,tabl:2,test:[11,12,13,14,21,22,23,28],test_clust:11,test_full_path_mapp:21,test_io:22,test_parse_entri:28,test_pathfind:23,test_pathwai:12,test_rdf:13,test_van_hov:14,util:[24,25,26,27,28],v2018:1,v2019:1,v2021:1,van_hov:[15,30]}}) \ No newline at end of file +Search.setIndex({docnames:["_themes/README","change_log","index","modules","pymatgen","pymatgen.analysis","pymatgen.analysis.diffusion","pymatgen.analysis.diffusion.aimd","pymatgen.analysis.diffusion.aimd.clustering","pymatgen.analysis.diffusion.aimd.pathway","pymatgen.analysis.diffusion.aimd.rdf","pymatgen.analysis.diffusion.aimd.tests.test_clustering","pymatgen.analysis.diffusion.aimd.tests.test_pathway","pymatgen.analysis.diffusion.aimd.tests.test_rdf","pymatgen.analysis.diffusion.aimd.tests.test_van_hove","pymatgen.analysis.diffusion.aimd.van_hove","pymatgen.analysis.diffusion.analyzer","pymatgen.analysis.diffusion.neb","pymatgen.analysis.diffusion.neb.full_path_mapper","pymatgen.analysis.diffusion.neb.io","pymatgen.analysis.diffusion.neb.pathfinder","pymatgen.analysis.diffusion.neb.periodic_dijkstra","pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper","pymatgen.analysis.diffusion.neb.tests.test_io","pymatgen.analysis.diffusion.neb.tests.test_pathfinder","pymatgen.analysis.diffusion.tests.test_analyzer","pymatgen.analysis.diffusion.utils","pymatgen.analysis.diffusion.utils.maggma","pymatgen.analysis.diffusion.utils.parse_entries","pymatgen.analysis.diffusion.utils.supercells","pymatgen.analysis.diffusion.utils.tests.test_parse_entries","pymatgen_diffusion","pymatgen_diffusion.aimd","pymatgen_diffusion.neb"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["_themes/README.rst","change_log.rst","index.rst","modules.rst","pymatgen.rst","pymatgen.analysis.rst","pymatgen.analysis.diffusion.rst","pymatgen.analysis.diffusion.aimd.rst","pymatgen.analysis.diffusion.aimd.clustering.rst","pymatgen.analysis.diffusion.aimd.pathway.rst","pymatgen.analysis.diffusion.aimd.rdf.rst","pymatgen.analysis.diffusion.aimd.tests.test_clustering.rst","pymatgen.analysis.diffusion.aimd.tests.test_pathway.rst","pymatgen.analysis.diffusion.aimd.tests.test_rdf.rst","pymatgen.analysis.diffusion.aimd.tests.test_van_hove.rst","pymatgen.analysis.diffusion.aimd.van_hove.rst","pymatgen.analysis.diffusion.analyzer.rst","pymatgen.analysis.diffusion.neb.rst","pymatgen.analysis.diffusion.neb.full_path_mapper.rst","pymatgen.analysis.diffusion.neb.io.rst","pymatgen.analysis.diffusion.neb.pathfinder.rst","pymatgen.analysis.diffusion.neb.periodic_dijkstra.rst","pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.rst","pymatgen.analysis.diffusion.neb.tests.test_io.rst","pymatgen.analysis.diffusion.neb.tests.test_pathfinder.rst","pymatgen.analysis.diffusion.tests.test_analyzer.rst","pymatgen.analysis.diffusion.utils.rst","pymatgen.analysis.diffusion.utils.maggma.rst","pymatgen.analysis.diffusion.utils.parse_entries.rst","pymatgen.analysis.diffusion.utils.supercells.rst","pymatgen.analysis.diffusion.utils.tests.test_parse_entries.rst","pymatgen_diffusion.rst","pymatgen_diffusion.aimd.rst","pymatgen_diffusion.neb.rst"],objects:{"pymatgen.analysis":{diffusion:[6,0,0,"-"]},"pymatgen.analysis.diffusion":{aimd:[7,0,0,"-"],analyzer:[16,0,0,"-"],neb:[17,0,0,"-"],utils:[26,0,0,"-"]},"pymatgen.analysis.diffusion.aimd":{clustering:[8,0,0,"-"],pathway:[9,0,0,"-"],rdf:[10,0,0,"-"],van_hove:[15,0,0,"-"]},"pymatgen.analysis.diffusion.aimd.clustering":{Kmeans:[8,1,1,""],KmeansPBC:[8,1,1,""],get_random_centroid:[8,3,1,""],get_random_centroids:[8,3,1,""]},"pymatgen.analysis.diffusion.aimd.clustering.Kmeans":{cluster:[8,2,1,""],get_centroids:[8,2,1,""],get_labels:[8,2,1,""],should_stop:[8,2,1,""]},"pymatgen.analysis.diffusion.aimd.clustering.KmeansPBC":{get_centroids:[8,2,1,""],get_labels:[8,2,1,""],should_stop:[8,2,1,""]},"pymatgen.analysis.diffusion.aimd.pathway":{ProbabilityDensityAnalysis:[9,1,1,""],SiteOccupancyAnalyzer:[9,1,1,""]},"pymatgen.analysis.diffusion.aimd.pathway.ProbabilityDensityAnalysis":{from_diffusion_analyzer:[9,2,1,""],generate_stable_sites:[9,2,1,""],get_full_structure:[9,2,1,""],to_chgcar:[9,2,1,""]},"pymatgen.analysis.diffusion.aimd.pathway.SiteOccupancyAnalyzer":{coords_ref:[9,4,1,""],from_diffusion_analyzer:[9,2,1,""],get_average_site_occupancy:[9,2,1,""],nsites:[9,4,1,""],site_occ:[9,4,1,""],structure:[9,4,1,""]},"pymatgen.analysis.diffusion.aimd.rdf":{RadialDistributionFunction:[10,1,1,""],RadialDistributionFunctionFast:[10,1,1,""]},"pymatgen.analysis.diffusion.aimd.rdf.RadialDistributionFunction":{coordination_number:[10,2,1,""],export_rdf:[10,2,1,""],from_species:[10,2,1,""],get_rdf_plot:[10,2,1,""]},"pymatgen.analysis.diffusion.aimd.rdf.RadialDistributionFunctionFast":{get_coordination_number:[10,2,1,""],get_one_rdf:[10,2,1,""],get_rdf:[10,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests":{test_clustering:[11,0,0,"-"],test_pathway:[12,0,0,"-"],test_rdf:[13,0,0,"-"],test_van_hove:[14,0,0,"-"]},"pymatgen.analysis.diffusion.aimd.tests.test_clustering":{KmeansPBCTest:[11,1,1,""],KmeansTest:[11,1,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_clustering.KmeansPBCTest":{test_cluster:[11,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_clustering.KmeansTest":{test_cluster:[11,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_pathway":{ProbabilityDensityTest:[12,1,1,""],SiteOccupancyTest:[12,1,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_pathway.ProbabilityDensityTest":{test_generate_stable_sites:[12,2,1,""],test_probability:[12,2,1,""],test_probability_classmethod:[12,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_pathway.SiteOccupancyTest":{test_site_occupancy:[12,2,1,""],test_site_occupancy_classmethod:[12,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_rdf":{RDFTest:[13,1,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_rdf.RDFTest":{test_rdf:[13,2,1,""],test_rdf_coordination_number:[13,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_van_hove":{EvolutionAnalyzerTest:[14,1,1,""],RDFTest:[14,1,1,""],VanHoveTest:[14,1,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_van_hove.EvolutionAnalyzerTest":{test_get_df:[14,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_van_hove.RDFTest":{setUp:[14,2,1,""],test_raises_ValueError_if_reference_species_not_in_structure:[14,2,1,""],test_raises_ValueError_if_sigma_is_not_positive:[14,2,1,""],test_raises_ValueError_if_species_not_in_structure:[14,2,1,""],test_raises_valueerror_if_ngrid_is_less_than_2:[14,2,1,""],test_rdf:[14,2,1,""],test_rdf_coordination_number:[14,2,1,""],test_rdf_two_species_coordination_number:[14,2,1,""]},"pymatgen.analysis.diffusion.aimd.tests.test_van_hove.VanHoveTest":{test_van_hove:[14,2,1,""]},"pymatgen.analysis.diffusion.aimd.van_hove":{EvolutionAnalyzer:[15,1,1,""],VanHoveAnalysis:[15,1,1,""]},"pymatgen.analysis.diffusion.aimd.van_hove.EvolutionAnalyzer":{atom_dist:[15,2,1,""],get_df:[15,2,1,""],get_min_dist:[15,2,1,""],get_pairs:[15,2,1,""],plot_atomic_evolution:[15,2,1,""],plot_evolution_from_data:[15,2,1,""],plot_rdf_evolution:[15,2,1,""],rdf:[15,2,1,""]},"pymatgen.analysis.diffusion.aimd.van_hove.VanHoveAnalysis":{get_1d_plot:[15,2,1,""],get_3d_plot:[15,2,1,""]},"pymatgen.analysis.diffusion.analyzer":{DiffusionAnalyzer:[16,1,1,""],fit_arrhenius:[16,3,1,""],get_arrhenius_plot:[16,3,1,""],get_conversion_factor:[16,3,1,""],get_extrapolated_conductivity:[16,3,1,""],get_extrapolated_diffusivity:[16,3,1,""]},"pymatgen.analysis.diffusion.analyzer.DiffusionAnalyzer":{as_dict:[16,2,1,""],export_msdt:[16,2,1,""],from_dict:[16,2,1,""],from_files:[16,2,1,""],from_structures:[16,2,1,""],from_vaspruns:[16,2,1,""],get_drift_corrected_structures:[16,2,1,""],get_framework_rms_plot:[16,2,1,""],get_msd_plot:[16,2,1,""],get_summary_dict:[16,2,1,""],plot_msd:[16,2,1,""]},"pymatgen.analysis.diffusion.neb":{full_path_mapper:[18,0,0,"-"],io:[19,0,0,"-"],pathfinder:[20,0,0,"-"],periodic_dijkstra:[21,0,0,"-"]},"pymatgen.analysis.diffusion.neb.full_path_mapper":{ChargeBarrierGraph:[18,1,1,""],MigrationGraph:[18,1,1,""],almost:[18,3,1,""],check_uc_hop:[18,3,1,""],generic_groupby:[18,3,1,""],get_hop_site_sequence:[18,3,1,""],get_only_sites_from_structure:[18,3,1,""],map_hop_sc2uc:[18,3,1,""]},"pymatgen.analysis.diffusion.neb.full_path_mapper.ChargeBarrierGraph":{get_least_chg_path:[18,2,1,""],get_summary_dict:[18,2,1,""],populate_edges_with_chg_density_info:[18,2,1,""]},"pymatgen.analysis.diffusion.neb.full_path_mapper.MigrationGraph":{add_data_to_similar_edges:[18,2,1,""],assign_cost_to_graph:[18,2,1,""],get_path:[18,2,1,""],get_structure_from_entries:[18,2,1,""],get_summary_dict:[18,2,1,""],host_structure:[18,2,1,""],only_sites:[18,2,1,""],symm_structure:[18,2,1,""],unique_hops:[18,2,1,""],with_base_structure:[18,2,1,""],with_distance:[18,2,1,""],with_local_env_strategy:[18,2,1,""]},"pymatgen.analysis.diffusion.neb.io":{MVLCINEBEndPointSet:[19,1,1,""],MVLCINEBSet:[19,1,1,""],get_endpoint_dist:[19,3,1,""],get_endpoints_from_index:[19,3,1,""]},"pymatgen.analysis.diffusion.neb.pathfinder":{DistinctPathFinder:[20,1,1,""],IDPPSolver:[20,1,1,""],MigrationHop:[20,1,1,""]},"pymatgen.analysis.diffusion.neb.pathfinder.DistinctPathFinder":{get_paths:[20,2,1,""],write_all_paths:[20,2,1,""]},"pymatgen.analysis.diffusion.neb.pathfinder.IDPPSolver":{from_endpoints:[20,2,1,""],get_unit_vector:[20,2,1,""],run:[20,2,1,""]},"pymatgen.analysis.diffusion.neb.pathfinder.MigrationHop":{get_sc_structures:[20,2,1,""],get_structures:[20,2,1,""],length:[20,2,1,""],write_path:[20,2,1,""]},"pymatgen.analysis.diffusion.neb.periodic_dijkstra":{get_optimal_pathway_rev:[21,3,1,""],periodic_dijkstra:[21,3,1,""],periodic_dijkstra_on_sgraph:[21,3,1,""]},"pymatgen.analysis.diffusion.neb.tests":{test_full_path_mapper:[22,0,0,"-"],test_io:[23,0,0,"-"],test_pathfinder:[24,0,0,"-"]},"pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper":{ChargeBarrierGraphTest:[22,1,1,""],MigrationGraphComplexTest:[22,1,1,""],MigrationGraphFromEntriesTest:[22,1,1,""],MigrationGraphSimpleTest:[22,1,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.ChargeBarrierGraphTest":{setUp:[22,2,1,""],test_get_summary_dict:[22,2,1,""],test_integration:[22,2,1,""],test_populate_edges_with_chg_density_info:[22,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.MigrationGraphComplexTest":{setUp:[22,2,1,""],test_add_data_to_similar_edges:[22,2,1,""],test_assign_cost_to_graph:[22,2,1,""],test_get_path:[22,2,1,""],test_group_and_label_hops:[22,2,1,""],test_not_matching_first:[22,2,1,""],test_periodic_dijkstra:[22,2,1,""],test_unique_hops_dict:[22,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.MigrationGraphFromEntriesTest":{setUp:[22,2,1,""],test_migration_graph_construction:[22,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper.MigrationGraphSimpleTest":{setUp:[22,2,1,""],test_get_pos_and_migration_path:[22,2,1,""],test_get_summary_dict:[22,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_io":{MVLCINEBEndPointSetTest:[23,1,1,""],MVLCINEBSetTest:[23,1,1,""],UtilityTest:[23,1,1,""],get_path:[23,3,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_io.MVLCINEBEndPointSetTest":{endpoint:[23,4,1,""],test_incar:[23,2,1,""],test_incar_user_setting:[23,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_io.MVLCINEBSetTest":{structures:[23,4,1,""],test_incar:[23,2,1,""],test_incar_user_setting:[23,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_io.UtilityTest":{structure:[23,4,1,""],test_get_endpoint_dist:[23,2,1,""],test_get_endpoints_from_index:[23,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_pathfinder":{DistinctPathFinderTest:[24,1,1,""],IDPPSolverTest:[24,1,1,""],MigrationHopTest:[24,1,1,""],get_path:[24,3,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_pathfinder.DistinctPathFinderTest":{test_get_paths:[24,2,1,""],test_max_path_length:[24,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_pathfinder.IDPPSolverTest":{final_struct:[24,4,1,""],init_struct:[24,4,1,""],test_idpp:[24,2,1,""],test_idpp_from_ep:[24,2,1,""]},"pymatgen.analysis.diffusion.neb.tests.test_pathfinder.MigrationHopTest":{setUp:[24,2,1,""],test_get_sc_structures:[24,2,1,""],test_get_start_end_structs_from_hop:[24,2,1,""],test_get_start_end_structs_from_hop_vac:[24,2,1,""]},"pymatgen.analysis.diffusion.tests":{test_analyzer:[25,0,0,"-"]},"pymatgen.analysis.diffusion.tests.test_analyzer":{DiffusionAnalyzerTest:[25,1,1,""],FuncTest:[25,1,1,""]},"pymatgen.analysis.diffusion.tests.test_analyzer.DiffusionAnalyzerTest":{test_from_structure_NPT:[25,2,1,""],test_init:[25,2,1,""],test_init_npt:[25,2,1,""]},"pymatgen.analysis.diffusion.tests.test_analyzer.FuncTest":{test_fit_arrhenius:[25,2,1,""],test_get_conversion_factor:[25,2,1,""]},"pymatgen.analysis.diffusion.utils":{parse_entries:[28,0,0,"-"],supercells:[29,0,0,"-"]},"pymatgen.analysis.diffusion.utils.parse_entries":{get_inserted_on_base:[28,3,1,""],get_insertion_energy:[28,3,1,""],get_matched_structure_mapping:[28,3,1,""],get_sym_migration_ion_sites:[28,3,1,""],process_entries:[28,3,1,""]},"pymatgen.analysis.diffusion.utils.supercells":{get_sc_fromstruct:[29,3,1,""],get_start_end_structures:[29,3,1,""]},"pymatgen.analysis.diffusion.utils.tests":{test_parse_entries:[30,0,0,"-"]},"pymatgen.analysis.diffusion.utils.tests.test_parse_entries":{ParseEntriesTest:[30,1,1,""]},"pymatgen.analysis.diffusion.utils.tests.test_parse_entries.ParseEntriesTest":{setUp:[30,2,1,""],test_filter_and_merge:[30,2,1,""],test_get_all_sym_sites:[30,2,1,""],test_get_inserted_on_base:[30,2,1,""],test_get_insertion_energy:[30,2,1,""],test_process_ents:[30,2,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function","4":"py:attribute"},terms:{"0000":[23,24],"0001":24,"0003":24,"0004":24,"0005":24,"0006":24,"0008":24,"0009":24,"001":20,"0023":24,"0028":24,"0030":24,"0031":24,"0032":24,"0036":24,"0043":24,"005":10,"0050":23,"0055":24,"0057":24,"0078":24,"0085":24,"0132":24,"0133":24,"0137":24,"0139":24,"0181":24,"0196":24,"0211":24,"0218":24,"0219":24,"0220":24,"0221":24,"0224":24,"0226":24,"0227":24,"0231":24,"0232":24,"0233":24,"0234":24,"0310":24,"0319":24,"0383":24,"0390":24,"0392":24,"0393":24,"0394":23,"0396":24,"0416":23,"0419":23,"0422":24,"0423":24,"0426":24,"0428":24,"0431":24,"0432":24,"0435":24,"0464":24,"0473":24,"0511":24,"0527":24,"0550":24,"0584":24,"0588":24,"0592":24,"0630":23,"0640":23,"0648":24,"0665":24,"0741":24,"0774":24,"0783517723596":24,"0784":24,"0799":23,"0844":24,"0846":24,"0868":23,"0893":23,"089343":23,"0910":2,"0919":24,"0924":24,"0929":23,"0943":24,"0947":24,"0948":24,"0950":24,"0951":24,"0952":24,"0953":24,"0954":24,"0968":24,"0972":24,"0973":24,"0975":24,"0976":24,"0990":24,"0991":24,"0994":24,"100":18,"1000":[8,16,20],"100000":18,"1001":24,"1009":24,"101":[10,15],"1020":24,"1021":16,"1024":24,"1029":24,"1039":16,"1041":24,"1043":24,"1046":23,"1049":24,"1050":24,"1054":24,"1058":24,"1066":24,"1082":24,"1098":24,"1106":24,"1114":24,"1115":24,"113":20,"1140":24,"1143":24,"1173":24,"1174":24,"1189":24,"1191":24,"1192":24,"1196":24,"1200":24,"1201":24,"1203":23,"1223":23,"1225":24,"1236":24,"1239":24,"1240":24,"1242":24,"1243":24,"1245":24,"1246":24,"1247":24,"1248":24,"1249":24,"1251":24,"1252":24,"1253":24,"1255":24,"1256":24,"1257":24,"1259":24,"1260":24,"1261":24,"1264":24,"1276":24,"1277":24,"1280":24,"1303":24,"1314":24,"131710473490111":23,"1318":24,"1320":24,"1329":23,"1370":24,"1373":24,"1374":24,"1381":24,"140":20,"1407":24,"14080369885537":23,"1410":24,"1412":24,"1421":[23,24],"1436976":2,"1437":24,"1439":24,"1441":24,"1447":24,"1448":24,"1454":24,"1455":24,"1457":23,"1459":24,"148":16,"1578":24,"1615":24,"163":15,"1653":24,"1656":24,"1657":24,"1658":24,"1659":24,"1660":24,"1661":24,"1669":24,"1670":24,"1674":24,"173":15,"1787":23,"1817":24,"1821":24,"1822":24,"1847":24,"1874":24,"1889":24,"1893":24,"1914":24,"1918":24,"1957":24,"1961":24,"1978":24,"1981":24,"1999":24,"1mp2x12":16,"200":16,"2000":20,"2004":24,"2009":24,"2012":16,"2013":16,"2014":20,"2015":[2,9,15],"2016":24,"2018":15,"2024":24,"2059":24,"2093":24,"2099":24,"2100":24,"2101":24,"2102":24,"2108":24,"2113":24,"2119":24,"2121":23,"2129":24,"2130":24,"2137":24,"2139":24,"214106":20,"2153":23,"2156":24,"2160":24,"2180":24,"2181":24,"2184":24,"2199":24,"2203":24,"2213":23,"2218449146199":23,"2219":24,"2220":24,"2224":24,"2228":24,"2243":24,"2266":24,"2268":24,"2270":24,"2272":24,"2274":24,"2278":24,"2279":24,"2281":24,"2283":24,"2296":24,"2300":24,"2339":24,"2347":24,"2372":23,"2376":24,"2392":24,"240":[20,29],"2449":24,"2450":24,"2499":24,"2500":[23,24],"2501":24,"2503":24,"2509":24,"2510":24,"2515":24,"2517":24,"2550":24,"2551":24,"2608":24,"2614":24,"2624":24,"2628":23,"2636":24,"2638":24,"2642":24,"2645":23,"2660":24,"2665":24,"2666":24,"2672":24,"2680":23,"2684":23,"2697":24,"2702":24,"2705":24,"2707":24,"2711":24,"2714":24,"2718":24,"2722":24,"2726":24,"2729":24,"2732":24,"2733":24,"2739":24,"2743":24,"2744":24,"2747":24,"2784":24,"2785":24,"2787":23,"2801":24,"2813":24,"2822":24,"2829":24,"2830":24,"2835":24,"2839":24,"2840":24,"2842":24,"2852":23,"2876":24,"2879":23,"2898":24,"2901":24,"2929":24,"2933":24,"2934":24,"2960":24,"2988":24,"2998":24,"2999":24,"2dt":16,"2x2x2":18,"3034":24,"3108":24,"3110":24,"3116":24,"3136":23,"3154":[23,24],"3155":24,"3156":24,"3179":23,"3213":24,"3220":24,"3224":24,"3228":24,"3255":24,"3256":24,"3269":24,"3302":24,"3308":24,"3310":24,"3312":24,"3313":24,"3322":24,"3324":24,"3325":24,"3332":24,"3333":24,"3335":24,"3336":24,"3337":24,"3395":24,"3417":24,"3419":24,"3538":24,"3541":24,"3543":23,"3545":24,"3546":24,"3552":24,"3553":24,"3556":24,"3559":24,"3561":24,"3563":24,"3588":23,"3597":24,"3601":24,"3603":24,"3619":24,"3621":24,"3633":24,"3635":24,"3658":24,"3660":24,"3661":24,"3664":24,"3672":24,"3680":23,"3694":24,"3711":24,"3716":24,"3720":24,"3721":24,"3723":24,"3724":24,"3727":24,"3730":24,"3736":24,"3739":24,"3740":24,"3741":24,"3742":24,"3743":24,"3744":24,"3745":24,"3746":24,"3747":24,"3748":24,"3749":24,"3752":24,"3753":24,"3755":24,"3756":24,"3757":24,"3763":24,"3767":24,"3769":24,"3774":24,"3775":24,"3785":24,"3791":24,"3797":23,"3799":24,"3800":24,"3801":24,"3806":24,"3829":24,"3832":24,"3893":24,"3898":24,"3942":24,"3946":24,"3957":24,"3959":24,"3971":24,"3973":24,"3974":24,"3rp":9,"4006":24,"4023":24,"4024":24,"4026":24,"4027":24,"4028":24,"4034":24,"4035":24,"4036":24,"4047":24,"4049":24,"4061":24,"4062":24,"4075":23,"4086":24,"4087":24,"4088":24,"4090":24,"4112":24,"4114":24,"4115":24,"411723299877":24,"4132":23,"4168":24,"4175":24,"4189":24,"4190":24,"4201":23,"4202":24,"4207":24,"4208":24,"4215":24,"4217":24,"4220":24,"4221":24,"4228":24,"4229":24,"4230":24,"4252":24,"4253":24,"4299":24,"4302":24,"4360":23,"4370":23,"4398":24,"4400":24,"4436":24,"4439":24,"4444":24,"4458":24,"4459":24,"4461":24,"4483":24,"4487":24,"4491":23,"4493":24,"4499":24,"4506":23,"4522":24,"4530":24,"4539":23,"4547":24,"4553":24,"4574":[23,24],"4577":24,"4584":23,"4589":24,"4590":24,"4591":24,"4593":24,"4604":24,"4605":24,"4611":24,"4617":24,"4622":24,"4648":24,"4676":24,"4681":24,"4692":24,"4693":24,"4699":24,"4703":24,"4716":24,"4720":24,"4722":24,"4732":24,"4734":24,"4740":24,"4751":24,"4765":24,"4767":24,"4769":24,"4770":24,"4773":24,"4774":23,"4775":24,"47759961582329":24,"4779":24,"4782":24,"4786":24,"4792":24,"4821":24,"4825":24,"4835":24,"4861":24,"4863":24,"4867":24,"4868":24,"4871":24,"4873":24,"4884":24,"4889":24,"4923":24,"4947":24,"4948":23,"4950":23,"4966":24,"4973":[23,24],"4977":24,"4980":24,"4982":24,"4983":24,"4991":24,"4992":24,"4994":24,"4995":24,"4996":24,"4997":24,"5000":[23,24],"5002":24,"5004":24,"5010":24,"5011":24,"5018":24,"5019":24,"5020":24,"5023":24,"5033":24,"5040":24,"5041":24,"5046":24,"5049":24,"5050":[23,24],"5052":24,"5063":24,"5064":24,"5067":24,"5072":24,"5073":24,"5080":24,"5086":24,"510":23,"5102":24,"5103":24,"5110":24,"5112":24,"5118":24,"5120":24,"5124":24,"5125":24,"5129":24,"5132":24,"5133":24,"5134":24,"5135":24,"5136":24,"5145":24,"5155":24,"5167":24,"5169":24,"5185":24,"5190":24,"5201":24,"5202":24,"5214":24,"5215":24,"5219":24,"5220":24,"5224":24,"5225":24,"5229":24,"5232":24,"5235":24,"5240":24,"5249":24,"5256":24,"5258":24,"5259":24,"5260":24,"5261":24,"5263":24,"5264":24,"5266":24,"5268":24,"5272":24,"5281":24,"5282":24,"5288":24,"5290":24,"5295":24,"5319":24,"5328":24,"5329":24,"534":2,"5351":24,"5352":24,"5373":24,"5392":24,"5393":24,"5401":24,"5402":24,"5406":24,"5409":24,"5410":24,"5411":24,"5416":23,"5423":24,"5426":24,"5428":24,"5439":24,"5449":24,"5452":24,"5455":24,"5461":24,"5475":24,"5476":24,"5488":24,"5494":24,"5502":24,"5503":24,"5517":24,"5520":24,"5521":24,"5544":24,"5551":24,"5563":24,"5569":24,"5580":23,"5581":24,"5583":24,"5599":24,"5614":24,"5629":24,"5630":23,"5640":23,"5649":24,"5654":24,"5672":24,"5688":24,"5698":24,"5699":24,"5700":24,"5704":24,"5710":24,"5714":24,"5719":24,"5720":24,"5723":24,"5726":24,"5732":24,"5734":24,"5735":24,"5737":24,"5747":24,"5752":24,"5769":24,"5773":24,"5774":24,"5782":24,"5783":24,"5799":23,"5805":23,"5815":2,"5818":24,"582":23,"5836":24,"5860":24,"5868":23,"5895":23,"5951":24,"5953":24,"5958":24,"5964":24,"5965":24,"5966":24,"5974":[23,24],"5976":24,"5977":24,"6007":24,"6014":24,"6024":24,"6026":24,"6027":24,"6030":24,"6033":24,"6034":24,"6049":24,"6050":24,"6056":24,"6065":24,"6066":24,"6074":24,"6085":24,"6125":24,"6127":24,"6137":24,"6142":24,"6160":24,"6203":23,"6207":23,"6212":24,"6221":24,"6226":24,"6233":24,"6237":24,"6243":24,"6244":24,"6245":24,"6246":24,"6247":24,"6248":24,"6249":24,"6250":24,"6251":24,"6252":24,"6253":24,"6254":24,"6255":24,"6256":24,"6257":24,"6258":24,"6264":24,"6266":24,"6270":24,"6271":24,"6274":24,"6279":24,"6280":24,"6281":24,"6289":24,"6318":24,"6326":24,"6335":24,"6338":24,"6340":[23,24],"634014":23,"6342":23,"6375":23,"6433":24,"6438":24,"6439":24,"6442":24,"6443":24,"6454":24,"6455":24,"6456":24,"6457":[23,24],"6458":24,"6461":24,"6462":24,"6490":24,"6492":24,"6581":23,"6582":24,"6664":24,"6665":24,"6667":24,"6668":24,"6675":24,"6676":24,"6678":24,"6685":24,"6687":24,"6688":24,"6690":24,"6691":24,"6692":24,"6727":24,"6732":24,"6738":24,"6740":24,"6744":24,"6745":24,"6778":24,"6824":24,"6826":24,"6832":24,"6840":24,"6853":24,"6862":24,"6865":23,"6869":24,"6876":24,"6906":24,"6907":24,"6956":23,"7097":24,"7098":24,"7099":24,"7109":24,"7118":24,"7119":23,"7121":23,"7158":24,"7160":24,"7161":24,"7170":24,"7178":24,"7181":24,"7191":24,"7198":23,"7210":24,"7211":24,"7213":23,"7234":23,"7239":24,"7242":24,"7246":24,"7248":24,"7251":24,"7255":24,"7264":24,"7266":24,"7271":24,"7275":24,"7278":24,"7280":24,"7282":24,"7285":24,"7286":24,"7291":24,"7293":24,"7298":24,"7303":24,"7310":24,"7329":24,"7330":24,"7343":24,"7345":24,"7352":24,"7356":24,"7357":24,"7364":24,"7365":24,"7366":23,"7367":24,"7372":[23,24],"7373":24,"7374":24,"7377":24,"7378":24,"7379":24,"7383":24,"7385":24,"7386":24,"7387":[23,24],"7388":24,"7390":24,"7393":24,"7394":24,"7395":24,"7396":24,"7397":24,"7426":24,"7432":24,"7437":24,"7446":24,"7462":24,"7463":24,"7468":24,"7475":24,"7483":24,"7488":24,"7490":24,"7491":24,"7492":24,"7497":24,"7500":[23,24],"7504":24,"7514":24,"7516":24,"7520":24,"7525":24,"7555":24,"7559":24,"7574":24,"7579":24,"7600":23,"7625":24,"7626":24,"7627":24,"7628":23,"7632":24,"7633":24,"7637":24,"7645":24,"7657":24,"7659":24,"7673":24,"7719":24,"7722":24,"7725":24,"7727":24,"7728":24,"7733":23,"7734":24,"7749":24,"7754":24,"7758":24,"7761":24,"7779":24,"7780":24,"7781":24,"7782":24,"7787":23,"7791":24,"7799":24,"7816":24,"7819":24,"7820":24,"7823":24,"7835":23,"7874":24,"7879":23,"7891":24,"7901":24,"7902":24,"7910":23,"7949":24,"7964":24,"7965":24,"7982":24,"7985":23,"7994":23,"7998":24,"8000":24,"8020":24,"8049":24,"8051":24,"8052":24,"8123":24,"8141":24,"8148":24,"815000056846058":23,"8169":24,"8172":24,"8187":24,"8270":23,"8318":[9,15],"8325":[9,15],"8326":24,"8330":24,"8331":24,"8339":24,"8340":24,"8341":24,"8342":24,"8343":24,"8344":24,"8347":24,"8358":24,"8363":24,"8370":23,"8538":24,"8543":[23,24],"8544":24,"8545":24,"8546":24,"8557":24,"8558":24,"8561":24,"8562":24,"8567":24,"858":2,"8601":23,"8611":24,"8612":24,"8626":23,"8693444977544":24,"8719":24,"8720":24,"8726":24,"8729":24,"8730":24,"8734":24,"8736":24,"8743":24,"8744":24,"8745":24,"8747":24,"8749":24,"8750":24,"8751":24,"8752":24,"8753":24,"8754":24,"8755":24,"8756":24,"8757":24,"8758":24,"8761":24,"8764":24,"8774":24,"8779":24,"8788":24,"8797":23,"8840":24,"8875":24,"8934":24,"8935":24,"8944":24,"8950":24,"8951":24,"8955":23,"8966":24,"8967":24,"8973":24,"8976":24,"9000":23,"9009":24,"9010":24,"9035":23,"9046":24,"9047":24,"9048":24,"9049":24,"9050":24,"9053":24,"9057":24,"9132":23,"9201":23,"9205":24,"92093":2,"9216":24,"9219":24,"9230":24,"9231":24,"9239":23,"9354":24,"9360":23,"9370":23,"9383":24,"9385":24,"9397":24,"9414":24,"9418":24,"9423":24,"9424":24,"9425":24,"9431":24,"9463":23,"9469":24,"9495":24,"9500":2,"9506":24,"9512":24,"9522":24,"9525":24,"9528":24,"9564":24,"9568":24,"9569":[23,24],"9571":24,"9572":24,"9574":24,"9577":24,"9578":24,"9584":23,"9587":24,"9595":24,"9598":24,"9599":24,"9607":24,"9618":24,"9624":24,"9630":24,"9635":24,"9656":24,"9658":24,"9659":24,"9673":24,"9678":24,"9681":24,"9718":24,"9719":24,"9751":24,"9756":24,"9768":24,"9769":24,"9771":24,"9774":24,"9780":24,"9781":24,"9785":24,"9798":24,"9815":24,"9817":24,"9818":24,"9825":24,"9865":24,"9868":24,"9871":24,"9880":24,"9882":24,"9884":24,"9885":24,"9887":24,"9888":24,"9889":24,"9893":23,"9896":24,"9897":24,"9898":24,"9900":24,"9901":20,"9902":24,"9903":24,"9909":24,"9911":24,"9920":24,"9925":23,"9926":24,"9927":24,"9929":24,"9950":23,"9985":23,"9989":24,"9990":24,"9991":24,"9992":24,"9995":24,"9996":24,"9997":24,"9999":24,"9999995733517":23,"case":[11,12,13,14,18,20,22,23,24,30],"class":[2,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,30],"default":[10,15,16,18,20,21],"final":[8,20,29],"float":[9,10,15,16,18,20,28,29],"function":[9,10,15,18,20,21,28,29],"import":[1,8],"int":[8,10,15,16,18,19,20,21,29],"long":22,"new":[8,16,28],"public":2,"return":[8,9,10,15,16,18,19,20,21,28,29],"static":[8,15,18,20],"super":16,"true":[10,18,20,22,28],"try":29,"while":20,AND:2,ARE:2,BUT:2,FOR:2,For:[2,8,16,18,20,28],HAS:2,ITS:2,NOT:2,N_s:9,Pls:2,SUCH:2,THE:2,The:[0,2,8,9,10,15,16,18,20,21,28,29],USE:2,Use:16,Used:16,Useful:16,Using:18,_subplot:15,_theme:0,abc:[23,24],abl:29,about:20,abov:[2,9],absolut:20,abspath:0,accompani:2,accordingli:16,account:18,accur:[18,28],across:21,adapt:8,add:[0,2,18],add_data_to_similar_edg:18,add_kei:18,added:16,added_kei:18,adding:18,addit:[15,18,21],addition:28,addon:0,adjac:[10,15],advis:2,after:16,against:16,agreement:2,aimd:[5,6,16,31],algo:[8,20],algorithm:[8,9,20],all:[2,9,10,15,16,18,20,21,22,28,29],allow:[10,20,29],almost:18,along:[10,15],also:[0,28],altern:0,alwai:[2,10,15,20,21,22],amount:18,analys:[2,16],analysi:[1,2],analyz:[5,6,9,15],angl:[18,23,24,28],angle_tol:[18,28],angstrom:[9,10,15,18,20],ani:[2,15,16,18],appear:2,append:0,appli:[16,28],approach:20,arg:[16,19],argument:[15,16],aris:[2,16],arrai:[8,9,10,15,16,18],arrheniu:16,as_dict:16,ask:18,assign:18,assign_cost_to_graph:18,associ:[9,10,15,20],assum:[10,16,18,19,20,28],atom:[8,10,15,16,20,29],atom_dist:15,attribut:9,avail:16,averag:[9,10,15,16],avg_nstep:[15,16],awai:21,axes:[10,15],axessubplot:15,axi:16,back:2,bar:[15,16],base:[8,9,10,11,12,13,14,15,16,18,19,20,22,23,24,25,28,30],base_:28,base_entri:[18,28],base_struct:[28,29],base_struct_entri:28,base_structur:18,basi:2,basic:18,batteri:15,becaus:20,been:2,befor:[14,16,22,24,30],below:16,best:[21,29],best_an:21,better:20,between:[9,16,18,19,20],bigger:28,binari:2,bool:[10,16,18,20,29],both:[16,18,20],boundari:[2,8,19],built:18,busi:2,c2ee23355j:16,calc:29,calcul:[10,15,16,17,18,19,20,28,29],california:2,call:[20,21],callabl:[15,18,21],can:[0,8,9,15,16,18,20,21,22,28,29],cap:29,cation:[18,28],caus:2,cb_label:15,ceder:16,cell:[10,15,18,21,22,28,29],cell_rang:[10,15],center:10,centroid:8,chang:[8,16,20],character:15,charg:[16,18,22],chargebarriergraph:18,chargebarriergraphtest:22,check:[0,2,8,16,20,21,22],check_uc_hop:18,chem:[9,15,20],chemistri:16,chen:15,chgcar:9,choos:15,chose:8,chosen:20,chu:[9,15],cite:[9,15,16],classmethod:[9,10,16,18,20],cleanup:1,close:29,closer:9,closest:8,cluster:[2,5,6,7,9,31],cm203303y:16,cmap:15,cmocean:15,code:[2,18],color:15,color_plaett:15,column:15,combin:28,commerci:2,comp:18,compar:18,compat:1,complet:20,compon:[9,16,20],composit:10,compris:20,comput:[9,10,15,16],computed_entri:[18,28],computedentri:[18,28],computedstructureentri:[18,28],concentr:15,condit:[2,8,19],conduct:[9,15,16],conductor:[9,15,16],conf:0,configur:29,connect:18,consecut:20,consequenti:2,consid:[2,9,15,16],consider:16,constant:[16,20],constitut:16,construct:[18,20,29],constructor:16,constructur:18,contact:2,contain:[0,18,20,28],content:[0,5],contract:2,contributor:2,conveni:[16,20],converg:[9,16],convers:16,convert:16,coordin:[8,9,10],coordination_numb:10,coords_ref:9,copi:[2,18,28],core:[10,15,16,18,20,28,29],correct:[15,16],correl:[15,20],cost:[18,21],cost_kei:18,count:15,cover:22,cpu:10,creat:[9,11,12,13,14,16,22,23,24,25,28,29,30],crystal:9,csv:[10,15,16],cubic:[9,15,29],cubicsupercelltransform:29,current:[10,16,18],cutoff:[9,18,20],d_cutoff:9,damag:2,dat:[10,16],data:[2,8,10,15,16,18],databas:18,datafram:15,dataset:8,debug:29,decor:[18,28],decreas:29,defin:[15,18,28],deng:[9,15],densiti:[2,9,15,18,22],depend:20,deriv:2,describ:18,design:2,desir:16,detail:[2,20],determin:[8,9,16,18,20],develop:2,diagonali:22,dict:[16,18,21,28],dictionari:[18,21,28],differ:18,diffus:[1,2,5],diffusion_analyz:[9,15],diffusionanalyz:[2,9,15,16],diffusionanalyzertest:25,diffusivity_error:16,dijkstra:21,dimension:16,direct:[2,10,15,16],dirnam:[23,24],disclaim:2,disord:16,displac:[16,20],dist:19,distanc:[8,9,15,19,20],distinct:[15,20],distinctpathfind:20,distinctpathfindertest:24,distribut:[2,9,10,15],dmref:2,doc:[0,2],document:0,doe:[2,11,12,13,14,18,20,22,23,24,25,30],doesn:16,doi:16,don:[16,29],done:16,dopant:[9,15],drift:16,driv:0,drive:2,dure:[15,20],each:[2,8,16,18,20,21,28],easi:20,easier:20,easili:16,edg:[18,21],edu:[2,19],educ:2,either:[18,20],electrochem:16,electron:16,element:[8,10,15,16,19],els:16,empti:[8,29],end:[2,9,19,20,22],endors:2,endpoint:[18,19,20,23],energi:[9,16,18,20,28],engin:2,enhanc:[2,9,15],enough:[21,22],ensembl:10,entir:[22,28],entri:[18,28],environ:18,environment:16,ep_0:19,ep_1:19,equal:18,equilval:18,equival:[18,20,28],error:[2,16],esit:[20,29],esp:16,especi:16,estim:16,etc:16,even:2,event:[2,18,29],everi:16,evolut:15,evolutionanalyz:15,evolutionanalyzertest:14,exactli:18,exampl:[8,16],exclus:2,execut:[11,12,13,14,22,23,24,25,30],exemplari:2,exercis:[14,22,24,30],exist:[0,16,20],exp:16,expect:16,export_msdt:16,export_rdf:10,express:2,extens:[10,16],extern:15,extra:15,extract:2,extrapol:16,extrem:20,factor:16,fals:[10,16,18,20,29],famili:16,far:8,fast:[9,10],faster:[16,29],featur:8,fee:2,fiel:19,field:[18,21],figsiz:15,file:[2,10,16,20],filenam:[9,10,16,20],filepath:16,filter:18,final_struct:24,find:[2,18,20,21,29],first:[15,16,19,20],fit:[2,16],fit_arrheniu:16,fixtur:[14,22,24,30],flask:0,flip:18,fname:20,folder:0,follow:[0,2,9,15,16,21],forc:20,fork:2,form:[2,18,20],format:[9,10,16,18],formula:20,found:21,foundat:2,fpm_uc:18,fraction:[8,9,18,28],frame:15,framework:[16,18],free:2,frequenc:16,fro:[18,28],from:[2,8,9,15,16,18,19,21,28,29],from_dict:16,from_diffusion_analyz:9,from_endpoint:20,from_fil:16,from_speci:10,from_structur:16,from_vasprun:16,full:28,full_path_mapp:[5,6,17,31],full_structur:18,fulli:20,func:15,functest:25,functiontyp:15,fund:2,further:9,futur:[2,15],gaussian:[10,15],gener:[8,9,16,18,19,20,29],generate_stable_sit:9,generic_groupbi:18,geometr:[8,29],get:[9,10,15,16,18,20,28],get_1d_plot:15,get_3d_plot:15,get_arrhenius_plot:16,get_atomic_distribut:15,get_average_site_occup:9,get_centroid:8,get_conversion_factor:16,get_coordination_numb:10,get_df:15,get_drift_corrected_structur:16,get_endpoint_dist:19,get_endpoints_from_index:19,get_extrapolated_conduct:16,get_extrapolated_diffus:16,get_framework_rms_plot:16,get_full_structur:9,get_hop_site_sequ:18,get_inserted_on_bas:28,get_insertion_energi:28,get_label:8,get_least_chg_path:18,get_matched_structure_map:28,get_min_dist:15,get_msd_plot:16,get_one_rdf:10,get_only_sites_from_structur:18,get_optimal_pathway_rev:21,get_pair:15,get_path:[18,20,23,24],get_random_centroid:8,get_rdf:10,get_rdf_plot:10,get_sc_fromstruct:29,get_sc_structur:20,get_start_end_structur:29,get_structur:20,get_structure_from_entri:18,get_summary_dict:[16,18],get_sym_migration_ion_sit:28,get_unit_vector:20,gilman:2,git:0,give:29,given:[9,10,15,16,18,20,21,28],good:[2,16,21],grant:2,granular:16,graph:[16,18,21,22],grid:[9,10,15],group:[16,18,19,22,28],gtol:20,guess:[8,16,20],guid:0,halv:[18,28],handl:18,has:[9,16,18],have:[8,11,12,13,14,16,18,21,22,23,24,25,30],heap:21,heat:15,heavili:2,henkelman:[19,20],here:18,herebi:2,hereund:2,hierach:9,higher:9,his:0,holder:2,hook:[14,22,24,30],hop:[18,22,29],hop_dist:18,hop_list:18,host:[18,20,28],host_structur:18,hove:[2,15],how:21,howev:2,html_theme:0,html_theme_path:0,http:19,huge:16,hundr:15,hydrogen:20,idea:18,idpp:[1,2,20],idpp_kwarg:20,idppsolv:20,idppsolvertest:24,ignor:15,imag:[10,15,16,18,20,21],img:18,implement:[1,8,10,15],impli:2,improv:20,incar:15,incident:2,includ:[1,2,9,10,15,16,20],include_mscd_t:16,include_msd_t:16,inconsist:16,increas:20,index:[2,8,10,15,18,21],indic:[9,10,15,18,19,20,21],indirect:2,individu:16,inequilval:22,info:20,inform:[16,18],init_struct:24,initi:[8,9,10,15,16,20,29],initial_centroid:8,initial_disp:16,initial_structur:16,inlcud:17,input:[15,16,18,19,20,28],insert:[18,28],inserted_:28,inserted_entri:[18,28],inserted_struct:28,insertion_energi:18,instanc:[11,12,13,14,22,23,24,25,28,30],instead:[1,16,20],int_:9,intend:0,intercal:20,intercol:18,interest:[9,10,15],interfaci:15,interpol:20,interrupt:2,interstiti:[9,15,20],interv:[9,15],invent:2,invers:18,ion:[15,16,18,20,28],ionic:[9,16],ionic_step_skip:16,is_averag:10,isit:[20,29],item:18,iter:[8,16,20,21,29],its:[2,16],jimag:21,jolla:2,json:[16,18],just:[10,20],kei:[18,21],kelvin:16,kenneth:0,keyword:[16,19],kind:28,kmean:8,kmeanspbc:8,kmeanspbctest:11,kmeanstest:11,known:20,kr_small:0,kwarg:[15,16,18,19,20],lab:2,label:[8,10,15,18,22],lambda:21,landscap:9,larg:0,later:18,lattic:[8,16,18,20,23,24,29],leaf:21,leaf_nod:21,least:[16,18],lee:16,legend:10,lenght:18,length:[18,20,22,28,29],less:[15,29],li10:16,li10gep2s12:16,li3fe4p4o16:20,li4fe4p4o16:20,liabil:2,liabl:2,librari:0,life4p4o16:20,like:[2,8,16,18,20],limit:[2,10,21],lin:15,linear:20,linearsegmentedcolormap:15,linspac:10,list:[2,8,9,10,15,16,18,19,20,28,29],list_in:18,listedcolormap:15,lithium:16,loc_peak:10,local:18,local_env:18,loss:2,lost:2,low:9,lowest:21,ltol:[18,28],m_path:18,made:16,maggma:[5,6,26],mai:[2,9,16],mail:2,main:16,mainli:20,mainten:2,make:[2,8,16,20,22],mani:[21,28,29],manipul:2,manner:20,map:[15,18,28],map_hop_sc2uc:18,match:[16,18,20,28],matching_:16,mater:[9,15],materi:[2,16,18],matplotlib:[15,16],matrix:[16,20,28],mavrl:19,max:16,max_atom:[20,29],max_disp:20,max_dist:18,max_imag:21,max_iter:8,max_path_length:20,max_val:18,maxim:10,maximum:[8,10,15,16,18,20,29],maxit:20,mean:[2,8,16,18,20],meant:16,measur:16,mechan:[16,20],melt:16,memori:16,merchant:2,met:2,metal:[18,28],metast:18,method:[9,10,11,12,13,14,16,20,22,23,24,25,30],methodnam:[11,12,13,14,22,23,24,25,30],metric:8,miara:16,might:[15,18,21],migraiton:18,migrat:[2,18,20,28,29],migrating_ion:28,migrating_ion_entri:[18,28],migrating_speci:[18,20],migration_graph:18,migrationgraph:[18,28],migrationgraphcomplextest:22,migrationgraphfromentriestest:22,migrationgraphsimpletest:22,migrationhop:[18,20,22],migrationhoptest:24,migratrion:18,min:[18,20],min_atom:[20,29],min_length:[20,29],min_ob:16,min_step:16,minim:[10,20],minimum:[10,15,16,20,29],miss:21,mit:2,mitnebset:19,mitrelaxset:19,mitsuhiko:0,mn6o5f7:22,mobil:[16,18],mode:[15,16,18,20],modif:[2,19],modifi:2,modul:[2,5],moment:15,monti:[16,18],more:[2,9,15,18,20,28],most:0,move:[16,20,21],mscd:16,msd:16,msonabl:[16,18],much:29,multipl:16,multipli:16,multiprocess:16,must:[2,16,28],mvlcinebendpointset:19,mvlcinebendpointsettest:23,mvlcinebset:19,mvlcinebsettest:23,mxn:8,n_job:10,na3ps4:[9,15],name:[2,11,12,13,14,18,20,22,23,24,25,28,30],namespac:[1,2,3],nation:2,ncore:16,ndarrai:[8,16],nearest:9,nearneighbor:18,neb:[1,5,6,29,31],nebpath:20,need:[16,18,20,28],neglig:2,neighbor:18,neither:2,nest:9,network:[18,20],networkx:21,new_temp:16,ngrid:[10,15],nimag:20,nion:9,node:[18,21],non:18,none:[8,10,15,16,18,20,21],nor:2,note:[2,9,15,16,19,20],notic:2,now:[1,18],npt:16,nsite:9,ntimestep:9,number:[8,9,10,15,16,20,28,29],numpi:[9,10,16],nvt:16,nx3:9,object:[8,9,10,15,16,18,19,20,21,22,28,29],oblig:2,observ:16,obtain:[2,9,15,16,18,20,28,29],occup:9,occupi:18,offic:2,often:[16,21],old:8,old_centroid:8,omega:9,onc:16,one:[0,10,15,16,19,28],ong:[9,15,16],onli:[15,16,18,20,28],only_single_cat:[18,28],only_sit:18,onto:[18,28],oper:[2,18],optim:21,option:[10,15,16,18,21,28],order:16,origin:16,other:[2,15,16,18,20],otherwis:[2,10,16],out:[0,2,28],output:[10,18],outsid:[18,23],over:[9,10,16,29],overal:16,oxid:16,p_ratio:9,packag:[1,2,5],paddl:16,page:[0,2],pair:[10,15,20,21,28],panda:15,paper:[9,15,16],paragraph:2,param:[9,18,19,20,28],paramet:[8,9,10,15,16,18,19,20,21,28,29],parent:21,pars:[15,16,18],parse_entri:[5,6,26],parseentriestest:30,part:15,parti:2,particular:[2,15],pass:[16,18],passthrough:20,path:[0,2,16,18,20,21,28],path_par:21,path_str:[23,24],pathfind:[5,6,17,18,31],pathwai:[5,6,7,17,18,21,31],pbc:8,peak:10,per:20,perc_mod:20,percol:[18,20],perfect:19,perform:[16,20],period:[2,8,19,21],periodic_dijkstra:[5,6,17,31],periodic_dijkstra_on_sgraph:21,periodicsit:[23,24,29],permiss:2,permit:2,phase:[16,18,28],phy:20,placehold:20,pleas:[2,9,15,16,20],plot:[10,15,16],plot_atomic_evolut:15,plot_evolution_from_data:15,plot_msd:16,plot_rdf_evolut:15,plt:16,pmg:29,pmg_structur:[9,10,20],point:[8,9,10,15,16,19,20,21,22],popul:[18,21,22],populate_edges_with_chg_density_info:18,posit:[8,20,28],possibl:[2,18,20,29],potenti:20,potential_data_kei:18,potential_field:18,potim:15,pre:16,precis:[18,20],preliminari:2,present:[16,18,29],pretti:16,principl:[15,16],print:18,prior:2,probabilitydensityanalysi:9,probabilitydensitytest:12,probabl:[2,9],probe:15,process:[10,15,16,20,28],process_entri:28,procur:2,product:[2,18],profit:2,program:2,progress:2,project:0,promot:2,properti:[10,18,20],provid:[2,8,16,20,28],pull:2,purpos:2,put:0,py3k:1,pymatgen:[1,2],pymatgen_diffus:1,pymatgentest:[24,25],pypi:1,pyplot:16,python:18,quantit:15,quantiti:16,quickli:21,radial:[10,15],radialdistributionfunct:10,radialdistributionfunctionfast:10,radiu:[10,18,22],rais:[11,12,13,14,22,23,24,25,30],random:8,randomli:8,rang:[10,15],rank:28,rdf:[5,6,7,15,31],rdftest:[13,14],reaction:15,read:[18,19],real:16,reason:2,recommend:15,redistribut:2,reduc:[15,16],ref_speci:10,refer:[2,9,10,18,20],reference_indic:10,reference_speci:[10,15],regent:2,regress:16,regular:20,reitz:0,relat:[0,16],relax:[19,20],releas:[1,2],relev:2,reli:2,reliabl:16,remov:20,repositori:[0,2],repres:20,represent:[16,18,29],reproduc:2,request:2,requir:[15,16,19],research:2,reserv:2,resolut:15,restrict:16,result:16,retain:2,revolution:2,richard:16,right:2,rmax:[10,15],rmin:10,rms:16,role:[9,15],run1:16,run2:16,run3:16,run:[8,10,16,20],runtest:[11,12,13,14,22,23,24,25,30],same:[9,10,18,20,22,28],sampl:16,san:28,saniti:22,save:[9,15,18],save_csv:15,sc_hop:18,sc_m:28,sc_mat:29,scheme:9,scienc:[2,16],scientif:2,seaborn:15,search:[2,21],second:19,secondari:16,see:[16,18,19,20],select:[9,15],self:15,send:2,sens:16,sequenc:[9,16,18],sequenti:16,serial:16,servic:2,set1:15,set:[9,10,14,15,16,18,19,20,21,22,24,30],setup:[14,22,24,30],sgraph:21,shall:2,shallow:9,shape:16,shortest:[9,15],should:[1,8,9,16,18,22],should_stop:8,show:16,sigma:[10,15],similar:[16,22],similiarli:22,simpl:8,simul:[7,9,10,15,16,20,29],sinc:[21,28],singl:[10,18,28],site:[9,16,18,19,20,22,28,29],site_index:21,site_indic:19,site_occ:9,siteoccupancyanalyz:9,siteoccupancytest:12,size:[20,28,29],skip:15,slope:16,slow:[9,15],slowli:9,small:0,smaller:28,smallest:[20,29],smear:[10,15],smidstrup:20,smooth:[10,16],sodium:15,softwar:[2,16,20],solid:15,solver:[1,20],some:[15,20,28],sometim:16,sort_tol:20,sourc:[2,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,28,29,30],space:28,spacegroupanalyz:[18,28],speci:[9,10,15,16,18,20,28],special:2,specif:[2,18],specifi:[11,12,13,14,15,18,22,23,24,25,30],spectrum:15,speed:16,spring:20,spring_const:20,squar:[8,16],stabil:16,stabl:9,stable_sit:9,standard:[0,16,20],start:[16,18,20,29],start_u:18,state:[15,16],statist:[15,16],step:[9,15,16,20],step_siz:20,step_skip:[15,16],stipul:16,stol:[18,28],stop:[8,16,21],store:9,str:[9,10,15,16,18,20,21,28],strategi:18,strict:[2,18,28],strictur:16,string:[10,15,16,18,20],struc_sc:29,structur:[2,9,10,15,16,18,19,20,23,24,28,29],structure_is_bas:18,structure_match:28,structuregraph:[18,21],structurematch:[18,28],studi:16,subject:16,submodul:[0,5,31],subsequ:20,subset:[9,15],substitut:2,suffici:16,sum:8,summari:[16,23,24],supercel:[5,6,10,15,18,20,26,28],superion:[9,15,16],suppli:[2,8,16],support:[2,10,16,19,20],sure:22,symbol:[10,15],symm_structur:[18,20],symmetr:[18,20],symmetri:[18,20,28],symmetrizedstructur:20,symprec:[18,20,28],sys:0,tabl:15,take:[10,16,28],tang:15,target:21,target_label:18,target_reach:21,technolog:2,temp:16,temperatur:16,term:[2,9],termin:29,test:19,test_add_data_to_similar_edg:22,test_assign_cost_to_graph:22,test_filter_and_merg:30,test_fit_arrheniu:25,test_from_structure_npt:25,test_generate_stable_sit:12,test_get_all_sym_sit:30,test_get_conversion_factor:25,test_get_df:14,test_get_endpoint_dist:23,test_get_endpoints_from_index:23,test_get_inserted_on_bas:30,test_get_insertion_energi:30,test_get_path:[22,24],test_get_pos_and_migration_path:22,test_get_sc_structur:24,test_get_start_end_structs_from_hop:24,test_get_start_end_structs_from_hop_vac:24,test_get_summary_dict:22,test_group_and_label_hop:22,test_idpp:24,test_idpp_from_ep:24,test_incar:23,test_incar_user_set:23,test_init:25,test_init_npt:25,test_integr:22,test_max_path_length:24,test_migration_graph_construct:22,test_not_matching_first:22,test_periodic_dijkstra:22,test_populate_edges_with_chg_density_info:22,test_prob:12,test_probability_classmethod:12,test_process_:30,test_raises_valueerror_if_ngrid_is_less_than_2:14,test_raises_valueerror_if_reference_species_not_in_structur:14,test_raises_valueerror_if_sigma_is_not_posit:14,test_raises_valueerror_if_species_not_in_structur:14,test_rdf:14,test_rdf_coordination_numb:[13,14],test_rdf_two_species_coordination_numb:14,test_site_occup:12,test_site_occupancy_classmethod:12,test_unique_hops_dict:22,testcas:[11,12,13,14,22,23,24,30],than:[9,15,16,28],thei:16,theme:0,theori:[2,19],thermal:15,thi:[0,2,8,9,10,15,16,19,20,21,22],those:[15,18,20],three:[2,10,15],threshold:9,through:[18,20],throughout:15,thu:8,time:[9,15,16],time_step:[15,16],timestep:16,to_chgcar:9,to_jimag:21,togeth:18,tol:[15,20],toler:[18,20,28],tool:[1,17],top:21,tort:2,total:[20,28],total_run_tim:16,tradit:16,trajectori:[2,8,9],transfer:2,transform:29,translat:[10,15,18,28],tri:16,tube:[18,22],tube_radiu:18,tupl:[10,15,20,21,29],turn:22,two:[9,19,20],type:[8,9,15,16,18,19,20,21,28,29],typic:16,uc_hop:18,ucsd:2,uncorrel:16,under:[2,18],understand:2,uniform:9,uninterrupt:2,union:[10,15,18,29],uniqu:[18,22],unique_hop:18,unit:[15,16,18,20,22,23,29],unitcel:29,unittest:[11,12,13,14,22,23,24,30],univers:2,unsort:18,until:[18,20,29],updat:2,usag:16,use:[0,2,9,11,12,13,14,15,16,18,22,23,24,25,28,30],use_strict_tol:[18,28],used:[0,2,8,9,15,16,18,20,21,28],useful:20,user:2,uses:[0,18],using:[2,9,10,15,18,19,20],usual:[16,20],utexa:19,util:[5,6,24,25],utilitytest:23,vac_mod:[18,20,29],vacanc:[18,20],valenc:16,valid:22,valu:[10,18,20],valueerror:[11,12,13,14,22,23,24,25,30],van:[2,15],van_hov:[5,6,7,31],vanhoveanalysi:15,vanhovetest:14,variabl:16,varianc:16,vasp:[9,16,18,19],vaspinputset:19,vasprun:16,vec:20,vector:[10,15,18,20,29],veri:[0,15,21],version:8,vesta:[9,20],via:[1,16,20],view:20,virtual:[2,20],visual:[9,20],volum:[23,24],volumetricdata:18,vtst:19,vtsttool:19,wai:[2,21,22],wang:15,want:[16,20],warrant:2,warranti:2,water:10,weight:[16,21],welcom:2,well:8,were:20,what:16,wheel:16,when:[11,12,13,14,16,18,22,23,24,25,30],where:[8,9,16,21,28],whether:[2,10,16,18],which:[9,15,16,18,20],window:15,with_base_structur:18,with_dist:18,with_local_env_strategi:18,within:[15,18],without:[2,21],work:[2,8,18,20,28],working_ion:28,would:[15,16,20],write:[16,19,20],write_all_path:20,write_path:20,written:[2,10,16],x_label:15,xlim:10,xml:16,yield:20,ylim:10,you:[0,2,8,9,15,16,18,20],your:0,zero:[10,15],zheng:15,zhu:[9,15]},titles:["krTheme Sphinx Style","Change Log","Introduction","pymatgen","pymatgen namespace","pymatgen.analysis namespace","pymatgen.analysis.diffusion package","pymatgen.analysis.diffusion.aimd package","pymatgen.analysis.diffusion.aimd.clustering module","pymatgen.analysis.diffusion.aimd.pathway module","pymatgen.analysis.diffusion.aimd.rdf module","pymatgen.analysis.diffusion.aimd.tests.test_clustering module","pymatgen.analysis.diffusion.aimd.tests.test_pathway module","pymatgen.analysis.diffusion.aimd.tests.test_rdf module","pymatgen.analysis.diffusion.aimd.tests.test_van_hove module","pymatgen.analysis.diffusion.aimd.van_hove module","pymatgen.analysis.diffusion.analyzer module","pymatgen.analysis.diffusion.neb package","pymatgen.analysis.diffusion.neb.full_path_mapper module","pymatgen.analysis.diffusion.neb.io module","pymatgen.analysis.diffusion.neb.pathfinder module","pymatgen.analysis.diffusion.neb.periodic_dijkstra module","pymatgen.analysis.diffusion.neb.tests.test_full_path_mapper module","pymatgen.analysis.diffusion.neb.tests.test_io module","pymatgen.analysis.diffusion.neb.tests.test_pathfinder module","pymatgen.analysis.diffusion.tests.test_analyzer module","pymatgen.analysis.diffusion.utils package","pymatgen.analysis.diffusion.utils.maggma module","pymatgen.analysis.diffusion.utils.parse_entries module","pymatgen.analysis.diffusion.utils.supercells module","pymatgen.analysis.diffusion.utils.tests.test_parse_entries module","pymatgen_diffusion package","pymatgen_diffusion.aimd package","pymatgen_diffusion.neb package"],titleterms:{acknowledg:2,aimd:[7,8,9,10,11,12,13,14,15,32],analysi:[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],analyz:16,api:2,chang:[1,2],cite:2,cluster:[8,32],content:[6,7,17,26,31,32,33],contribut:2,copyright:2,diffus:[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],document:2,exhaust:2,featur:2,full_path_mapp:[18,33],indic:2,introduct:2,krtheme:0,licens:2,log:[1,2],maggma:27,modul:[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],namespac:[4,5],neb:[17,18,19,20,21,22,23,24,33],non:2,our:2,packag:[6,7,17,26,31,32,33],parse_entri:28,pathfind:[20,33],pathwai:[9,32],periodic_dijkstra:[21,33],polici:2,pymatgen:[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],pymatgen_diffus:[31,32,33],rdf:[10,32],sphinx:0,style:0,submodul:[6,7,17,26,32,33],subpackag:[5,6,7,17,26,31,32,33],supercel:29,tabl:2,test:[11,12,13,14,22,23,24,25,30],test_analyz:25,test_clust:11,test_full_path_mapp:22,test_io:23,test_parse_entri:30,test_pathfind:24,test_pathwai:12,test_rdf:13,test_van_hov:14,util:[26,27,28,29,30],v2018:1,v2019:1,v2021:1,van_hov:[15,32]}}) \ No newline at end of file diff --git a/docs_rst/pymatgen.analysis.diffusion.rst b/docs_rst/pymatgen.analysis.diffusion.rst index 0b7a7582..677e4db1 100644 --- a/docs_rst/pymatgen.analysis.diffusion.rst +++ b/docs_rst/pymatgen.analysis.diffusion.rst @@ -11,6 +11,14 @@ Subpackages pymatgen.analysis.diffusion.neb pymatgen.analysis.diffusion.utils +Submodules +---------- + +.. toctree:: + :maxdepth: 7 + + pymatgen.analysis.diffusion.analyzer + Module contents --------------- diff --git a/pymatgen/analysis/diffusion/__init__.py b/pymatgen/analysis/diffusion/__init__.py index 445a4f7f..f7248225 100644 --- a/pymatgen/analysis/diffusion/__init__.py +++ b/pymatgen/analysis/diffusion/__init__.py @@ -4,4 +4,4 @@ __author__ = "Materials Virtual Lab" __email__ = "ongsp@eng.ucsd.edu" -__version__ = "2021.3.5" +__version__ = "2021.3.6" \ No newline at end of file diff --git a/setup.py b/setup.py index 5b3bfeb7..96da65cb 100644 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ setup( name="pymatgen-analysis-diffusion", packages=find_namespace_packages(include=["pymatgen.analysis.*"]), - version="2021.3.5", + version="2021.3.6", install_requires=["pymatgen>=2022.0.3", "joblib"], extras_require={}, package_data={}, @@ -40,4 +40,4 @@ "Topic :: Scientific/Engineering :: Chemistry", "Topic :: Software Development :: Libraries :: Python Modules", ], -) +) \ No newline at end of file