kim-tools 0.2.2__py3-none-any.whl → 0.2.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
kim_tools/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "0.2.2"
1
+ __version__ = "0.2.3"
2
2
 
3
3
  from .aflow_util import *
4
4
  from .aflow_util import __all__ as aflow_all
@@ -18,6 +18,7 @@ import ase
18
18
  import numpy as np
19
19
  from ase import Atoms
20
20
  from ase.cell import Cell
21
+ from ase.neighborlist import natural_cutoffs, neighbor_list
21
22
  from numpy.typing import ArrayLike
22
23
  from sympy import Symbol, linear_eq_to_matrix, matrix2numpy, parse_expr
23
24
 
@@ -1116,9 +1117,7 @@ class AFLOW:
1116
1117
  misfit_min_overall = struct["misfit"]
1117
1118
  library_proto_overall = struct["name"]
1118
1119
  found_overall = True
1119
- if struct["misfit"] < misfit_min_inlist and any(
1120
- proto in struct["name"] for proto in shortnames
1121
- ):
1120
+ if struct["misfit"] < misfit_min_inlist and struct["name"] in shortnames:
1122
1121
  misfit_min_inlist = struct["misfit"]
1123
1122
  library_proto_inlist = struct["name"]
1124
1123
  found_inlist = True
@@ -1429,8 +1428,10 @@ class AFLOW:
1429
1428
  self,
1430
1429
  atoms: Atoms,
1431
1430
  prototype_label: str,
1432
- max_resid: float = 1e-5,
1431
+ max_resid: Optional[float] = None,
1433
1432
  cell_rtol: float = 0.01,
1433
+ rot_rtol: float = 0.01,
1434
+ rot_atol: float = 0.01,
1434
1435
  ) -> List[float]:
1435
1436
  """
1436
1437
  Given an Atoms object that is a primitive cell of its Bravais lattice as
@@ -1455,8 +1456,19 @@ class AFLOW:
1455
1456
  max_resid:
1456
1457
  Maximum residual allowed when attempting to match the fractional
1457
1458
  positions of the atoms to the crystallographic equations
1459
+ If not provided, this is automatically set to 0.01*(minimum NN distance)
1458
1460
  cell_rtol:
1459
1461
  Relative tolerance on cell lengths and angles
1462
+ Justification for default value: AFLOW uses 0.01*(minimum NN distance)
1463
+ as default tolerance.
1464
+ rot_rtol:
1465
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1466
+ rotations. Default value chosen to be commensurate with AFLOW
1467
+ default distance tolerance of 0.01*(NN distance)
1468
+ rot_atol:
1469
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1470
+ rotations. Default value chosen to be commensurate with AFLOW
1471
+ default distance tolerance of 0.01*(NN distance)
1460
1472
 
1461
1473
  Returns:
1462
1474
  List of free parameters that will regenerate `atoms` (up to permutations,
@@ -1469,6 +1481,25 @@ class AFLOW:
1469
1481
  if AFLOW fails to match the re-generated crystal to the input crystal
1470
1482
 
1471
1483
  """
1484
+ # If max_resid not provided, determine it from neighborlist
1485
+ if max_resid is None:
1486
+ nl_len = 0
1487
+ cov_mult = 1
1488
+ while nl_len == 0:
1489
+ logger.info(
1490
+ "Attempting to find NN distance by searching "
1491
+ f"within covalent radii times {cov_mult}"
1492
+ )
1493
+ nl = neighbor_list("d", atoms, natural_cutoffs(atoms, mult=cov_mult))
1494
+ nl_len = nl.size
1495
+ cov_mult += 1
1496
+ # set the maximum error to 1% of NN distance to follow AFLOW convention
1497
+ max_resid = nl.min() * 0.01
1498
+ logger.info(
1499
+ "Automatically set max residual for solving position "
1500
+ f"equations to {max_resid}"
1501
+ )
1502
+
1472
1503
  # solve for cell parameters
1473
1504
  cell_params = solve_for_aflow_cell_params_from_primitive_ase_cell_params(
1474
1505
  atoms.cell.cellpar(), prototype_label
@@ -1655,11 +1686,13 @@ class AFLOW:
1655
1686
  # The internal shift may have taken us to an internal parameter
1656
1687
  # solution that represents a rotation, so we need to check
1657
1688
  if self.confirm_unrotated_prototype_designation(
1658
- atoms,
1659
- species,
1660
- prototype_label,
1661
- candidate_prototype_param_values,
1662
- cell_rtol,
1689
+ reference_atoms=atoms,
1690
+ species=species,
1691
+ prototype_label=prototype_label,
1692
+ parameter_values=candidate_prototype_param_values,
1693
+ cell_rtol=cell_rtol,
1694
+ rot_rtol=rot_rtol,
1695
+ rot_atol=rot_atol,
1663
1696
  ):
1664
1697
  logger.info(
1665
1698
  f"Found set of parameters for prototype {prototype_label} "
@@ -1689,7 +1722,9 @@ class AFLOW:
1689
1722
  test_atoms: Atoms,
1690
1723
  ref_atoms: Atoms,
1691
1724
  sgnum: Union[int, str],
1692
- rtol: float = 0.01,
1725
+ cell_rtol: float = 0.01,
1726
+ rot_rtol: float = 0.01,
1727
+ rot_atol: float = 0.01,
1693
1728
  ) -> bool:
1694
1729
  """
1695
1730
  Check whether `test_atoms` and `reference_atoms` are unrotated as follows:
@@ -1711,11 +1746,21 @@ class AFLOW:
1711
1746
  Primitive cell of a crystal
1712
1747
  sgnum:
1713
1748
  Space group number
1714
- rtol:
1749
+ cell_rtol:
1715
1750
  Parameter to pass to :func:`numpy.allclose` for comparing cell params.
1751
+ Justification for default value: AFLOW uses 0.01*(minimum NN distance)
1752
+ as default tolerance.
1753
+ rot_rtol:
1754
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1755
+ rotations. Default value chosen to be commensurate with AFLOW
1756
+ default distance tolerance of 0.01*(NN distance)
1757
+ rot_atol:
1758
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1759
+ rotations. Default value chosen to be commensurate with AFLOW
1760
+ default distance tolerance of 0.01*(NN distance)
1716
1761
  """
1717
1762
  if not np.allclose(
1718
- ref_atoms.cell.cellpar(), test_atoms.cell.cellpar(), rtol=rtol
1763
+ ref_atoms.cell.cellpar(), test_atoms.cell.cellpar(), rtol=cell_rtol
1719
1764
  ):
1720
1765
  logger.info(
1721
1766
  "Cell lengths and angles do not match.\n"
@@ -1748,7 +1793,11 @@ class AFLOW:
1748
1793
  return False
1749
1794
 
1750
1795
  return cartesian_rotation_is_in_point_group(
1751
- cart_rot, sgnum, test_atoms_copy.cell
1796
+ cart_rot=cart_rot,
1797
+ sgnum=sgnum,
1798
+ cell=test_atoms_copy.cell,
1799
+ rtol=rot_rtol,
1800
+ atol=rot_atol,
1752
1801
  )
1753
1802
 
1754
1803
  def confirm_unrotated_prototype_designation(
@@ -1757,7 +1806,9 @@ class AFLOW:
1757
1806
  species: List[str],
1758
1807
  prototype_label: str,
1759
1808
  parameter_values: List[float],
1760
- rtol: float = 0.01,
1809
+ cell_rtol: float = 0.01,
1810
+ rot_rtol: float = 0.01,
1811
+ rot_atol: float = 0.01,
1761
1812
  ) -> bool:
1762
1813
  """
1763
1814
  Check whether the provided prototype designation recreates ``reference_atoms``
@@ -1779,8 +1830,18 @@ class AFLOW:
1779
1830
  without specified atomic species
1780
1831
  parameter_values:
1781
1832
  The free parameters of the AFLOW prototype designation
1782
- rtol:
1833
+ cell_rtol:
1783
1834
  Parameter to pass to :func:`numpy.allclose` for comparing cell params
1835
+ Justification for default value: AFLOW uses 0.01*(minimum NN distance)
1836
+ as default tolerance.
1837
+ rot_rtol:
1838
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1839
+ rotations. Default value chosen to be commensurate with AFLOW
1840
+ default distance tolerance of 0.01*(NN distance)
1841
+ rot_atol:
1842
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1843
+ rotations. Default value chosen to be commensurate with AFLOW
1844
+ default distance tolerance of 0.01*(NN distance)
1784
1845
 
1785
1846
  Returns:
1786
1847
  Whether or not the crystals match
@@ -1792,8 +1853,10 @@ class AFLOW:
1792
1853
  )
1793
1854
 
1794
1855
  return self.confirm_atoms_unrotated_when_cells_aligned(
1795
- test_atoms,
1796
- reference_atoms,
1797
- get_space_group_number_from_prototype(prototype_label),
1798
- rtol,
1856
+ test_atoms=test_atoms,
1857
+ ref_atoms=reference_atoms,
1858
+ sgnum=get_space_group_number_from_prototype(prototype_label),
1859
+ cell_rtol=cell_rtol,
1860
+ rot_rtol=rot_rtol,
1861
+ rot_atol=rot_atol,
1799
1862
  )
@@ -168,7 +168,11 @@ def fractional_to_cartesian_itc_rotation_from_ase_cell(
168
168
 
169
169
 
170
170
  def cartesian_rotation_is_in_point_group(
171
- cart_rot: ArrayLike, sgnum: Union[int, str], cell: ArrayLike
171
+ cart_rot: ArrayLike,
172
+ sgnum: Union[int, str],
173
+ cell: ArrayLike,
174
+ rtol: float = 1e-2,
175
+ atol: float = 1e-2,
172
176
  ) -> bool:
173
177
  """
174
178
  Check that a Cartesian rotation is in the point group of a crystal given by its
@@ -184,6 +188,14 @@ def cartesian_rotation_is_in_point_group(
184
188
  http://doi.org/10.1016/j.commatsci.2017.01.017, with each row being a
185
189
  cartesian vector representing a lattice vector. This is
186
190
  consistent with most simulation packages, but transposed from the ITC
191
+ rtol:
192
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
193
+ rotations. Default value chosen to be commensurate with AFLOW
194
+ default distance tolerance of 0.01*(NN distance)
195
+ atol:
196
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
197
+ rotations. Default value chosen to be commensurate with AFLOW
198
+ default distance tolerance of 0.01*(NN distance)
187
199
  """
188
200
  # we don't care about properly transposing (i.e. worrying whether it's operating on
189
201
  # row or column vectors) the input cart_rot because that one is orthogonal, and
@@ -192,9 +204,11 @@ def cartesian_rotation_is_in_point_group(
192
204
 
193
205
  space_group_ops = get_primitive_genpos_ops(sgnum)
194
206
 
207
+ logger.info(f"Attempting to match fractional rotation:\n{frac_rot}")
208
+
195
209
  for op in space_group_ops:
196
- if np.allclose(frac_rot, op["W"], atol=1e-4):
197
- logger.info("Found matching rotation")
210
+ if np.allclose(frac_rot, op["W"], rtol=rtol, atol=atol):
211
+ logger.info(f"Found matching rotation with point group op:\n{op['W']}")
198
212
  return True
199
213
 
200
214
  logger.info("No matching rotation found")
@@ -1219,7 +1219,12 @@ class SingleCrystalTestDriver(KIMTestDriver):
1219
1219
  logger.info(msg)
1220
1220
 
1221
1221
  def _update_nominal_parameter_values(
1222
- self, atoms: Atoms, max_resid: float = 1e-5, cell_rtol: float = 0.01
1222
+ self,
1223
+ atoms: Atoms,
1224
+ max_resid: Optional[float] = None,
1225
+ cell_rtol: float = 0.01,
1226
+ rot_rtol: float = 0.01,
1227
+ rot_atol: float = 0.01,
1223
1228
  ) -> None:
1224
1229
  """
1225
1230
  Update the nominal parameter values of the nominal crystal structure from the
@@ -1250,9 +1255,20 @@ class SingleCrystalTestDriver(KIMTestDriver):
1250
1255
  atoms: Structure to analyze to get the new parameter values
1251
1256
  max_resid:
1252
1257
  Maximum residual allowed when attempting to match the fractional
1253
- positions of the atoms to the crystallographic equations
1258
+ positions of the atoms to the crystallographic equations.
1259
+ If not provided, this is automatically set to 0.01*(minimum NN distance)
1254
1260
  cell_rtol:
1255
- Relative tolerance on cell lengths and angles
1261
+ Relative tolerance on cell lengths and angles.
1262
+ Justification for default value: AFLOW uses 0.01*(minimum NN distance)
1263
+ as default tolerance.
1264
+ rot_rtol:
1265
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1266
+ rotations. Default value chosen to be commensurate with AFLOW
1267
+ default distance tolerance of 0.01*(NN distance)
1268
+ rot_atol:
1269
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1270
+ rotations. Default value chosen to be commensurate with AFLOW
1271
+ default distance tolerance of 0.01*(NN distance)
1256
1272
 
1257
1273
  Raises:
1258
1274
  AFLOW.FailedToMatchException:
@@ -1272,6 +1288,8 @@ class SingleCrystalTestDriver(KIMTestDriver):
1272
1288
  ],
1273
1289
  max_resid=max_resid,
1274
1290
  cell_rtol=cell_rtol,
1291
+ rot_rtol=rot_rtol,
1292
+ rot_atol=rot_atol,
1275
1293
  )
1276
1294
  except (AFLOW.FailedToMatchException, AFLOW.ChangedSymmetryException) as e:
1277
1295
  raise type(e)(
@@ -1516,7 +1534,10 @@ class SingleCrystalTestDriver(KIMTestDriver):
1516
1534
  def deduplicate_property_instances(
1517
1535
  self,
1518
1536
  properties_to_deduplicate: Optional[List[str]] = None,
1519
- allow_rotation: bool = True,
1537
+ allow_rotation: bool = False,
1538
+ aflow_np: int = 4,
1539
+ rot_rtol: float = 0.01,
1540
+ rot_atol: float = 0.01,
1520
1541
  ) -> None:
1521
1542
  """
1522
1543
  In the internally stored property instances,
@@ -1537,9 +1558,26 @@ class SingleCrystalTestDriver(KIMTestDriver):
1537
1558
  allow_rotation:
1538
1559
  Whether or not structures that are rotated by a rotation that is not in
1539
1560
  the crystal's point group are considered identical
1561
+ aflow_np:
1562
+ Number of processors to use to run the AFLOW executable
1563
+ rot_rtol:
1564
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1565
+ rotations. Default value chosen to be commensurate with AFLOW
1566
+ default distance tolerance of 0.01*(NN distance). Used only if
1567
+ `allow_rotation` is False
1568
+ rot_atol:
1569
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1570
+ rotations. Default value chosen to be commensurate with AFLOW
1571
+ default distance tolerance of 0.01*(NN distance). Used only if
1572
+ `allow_rotation` is False
1540
1573
  """
1541
1574
  deduplicated_property_instances = get_deduplicated_property_instances(
1542
- self.property_instances, properties_to_deduplicate, allow_rotation
1575
+ property_instances=self.property_instances,
1576
+ properties_to_deduplicate=properties_to_deduplicate,
1577
+ allow_rotation=allow_rotation,
1578
+ aflow_np=aflow_np,
1579
+ rot_rtol=rot_rtol,
1580
+ rot_atol=rot_atol,
1543
1581
  )
1544
1582
  logger.info(
1545
1583
  f"Deduplicated {len(self.property_instances)} Property Instances "
@@ -1743,8 +1781,10 @@ def query_crystal_structures(
1743
1781
 
1744
1782
  def detect_unique_crystal_structures(
1745
1783
  crystal_structures: Union[List[Dict], Dict],
1746
- allow_rotation: bool = True,
1784
+ allow_rotation: bool = False,
1747
1785
  aflow_np: int = 4,
1786
+ rot_rtol: float = 0.01,
1787
+ rot_atol: float = 0.01,
1748
1788
  ) -> Dict:
1749
1789
  """
1750
1790
  Detect which of the provided crystal structures is unique
@@ -1761,6 +1801,18 @@ def detect_unique_crystal_structures(
1761
1801
  allow_rotation:
1762
1802
  Whether or not structures that are rotated by a rotation that is not in the
1763
1803
  crystal's point group are considered identical
1804
+ aflow_np:
1805
+ Number of processors to use to run the AFLOW executable
1806
+ rot_rtol:
1807
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1808
+ rotations. Default value chosen to be commensurate with AFLOW
1809
+ default distance tolerance of 0.01*(NN distance). Used only if
1810
+ `allow_rotation` is False
1811
+ rot_atol:
1812
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1813
+ rotations. Default value chosen to be commensurate with AFLOW
1814
+ default distance tolerance of 0.01*(NN distance). Used only if
1815
+ `allow_rotation` is False
1764
1816
  Returns:
1765
1817
  Dictionary with keys corresponding to indices of unique structures and values
1766
1818
  being lists of indices of their duplicates
@@ -1813,7 +1865,13 @@ def detect_unique_crystal_structures(
1813
1865
  "structures_duplicate"
1814
1866
  ]:
1815
1867
  cart_rot = potential_rotated_duplicate["rotation"]
1816
- if not cartesian_rotation_is_in_point_group(cart_rot, sgnum, cell):
1868
+ if not cartesian_rotation_is_in_point_group(
1869
+ cart_rot=cart_rot,
1870
+ sgnum=sgnum,
1871
+ cell=cell,
1872
+ rtol=rot_rtol,
1873
+ atol=rot_atol,
1874
+ ):
1817
1875
  i_rot_dup = int(
1818
1876
  potential_rotated_duplicate["name"].split("/")[-1]
1819
1877
  )
@@ -1825,7 +1883,11 @@ def detect_unique_crystal_structures(
1825
1883
 
1826
1884
  unique_materials.update(
1827
1885
  detect_unique_crystal_structures(
1828
- rotated_structures, False, aflow_np
1886
+ crystal_structures=rotated_structures,
1887
+ allow_rotation=False,
1888
+ aflow_np=aflow_np,
1889
+ rot_rtol=rot_rtol,
1890
+ rot_atol=rot_atol,
1829
1891
  )
1830
1892
  )
1831
1893
 
@@ -1835,7 +1897,10 @@ def detect_unique_crystal_structures(
1835
1897
  def get_deduplicated_property_instances(
1836
1898
  property_instances: List[Dict],
1837
1899
  properties_to_deduplicate: Optional[List[str]] = None,
1838
- allow_rotation: bool = True,
1900
+ allow_rotation: bool = False,
1901
+ aflow_np: int = 4,
1902
+ rot_rtol: float = 0.01,
1903
+ rot_atol: float = 0.01,
1839
1904
  ) -> List[Dict]:
1840
1905
  """
1841
1906
  Given a list of dictionaries constituting KIM Property instances,
@@ -1858,6 +1923,18 @@ def get_deduplicated_property_instances(
1858
1923
  allow_rotation:
1859
1924
  Whether or not structures that are rotated by a rotation that is not in the
1860
1925
  crystal's point group are considered identical
1926
+ aflow_np:
1927
+ Number of processors to use to run the AFLOW executable
1928
+ rot_rtol:
1929
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1930
+ rotations. Default value chosen to be commensurate with AFLOW
1931
+ default distance tolerance of 0.01*(NN distance). Used only if
1932
+ `allow_rotation` is False
1933
+ rot_atol:
1934
+ Parameter to pass to :func:`numpy.allclose` for compariong fractional
1935
+ rotations. Default value chosen to be commensurate with AFLOW
1936
+ default distance tolerance of 0.01*(NN distance). Used only if
1937
+ `allow_rotation` is False
1861
1938
 
1862
1939
  Returns:
1863
1940
  The deduplicated property instances
@@ -1887,7 +1964,11 @@ def get_deduplicated_property_instances(
1887
1964
 
1888
1965
  # Get unique-duplicate dictionary
1889
1966
  unique_crystal_structures = detect_unique_crystal_structures(
1890
- property_instances_curr_name, allow_rotation
1967
+ crystal_structures=property_instances_curr_name,
1968
+ allow_rotation=allow_rotation,
1969
+ aflow_np=aflow_np,
1970
+ rot_rtol=rot_rtol,
1971
+ rot_atol=rot_atol,
1891
1972
  )
1892
1973
 
1893
1974
  # Put together the list of unique instances for the current
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kim-tools
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: Base classes and helper routines for writing KIM Tests
5
5
  Author-email: ilia Nikiforov <nikif002@umn.edu>, Ellad Tadmor <tadmor@umn.edu>, Claire Waters <bwaters@umn.edu>, "Daniel S. Karls" <karl0100umn@gmail.com>, Matt Bierbaum <matt.bierbaum@gmail.com>, Eric Fuemmeler <efuemmel@umn.edu>
6
6
  Maintainer-email: ilia Nikiforov <nikif002@umn.edu>
@@ -1,12 +1,12 @@
1
- kim_tools/__init__.py,sha256=gGt0sG7foY9MROLXGAYUkxV8GdwEulr_PS5wMm06mcM,433
1
+ kim_tools/__init__.py,sha256=KCoi0Z7lrEF8Q2naGttDB6JIrnlSoBPfubmh0QePzPY,433
2
2
  kim_tools/kimunits.py,sha256=jOxBv9gRVhxPE6ygAIUxOzCAfPI6tT6sBaF_FNl9m-M,5387
3
3
  kim_tools/aflow_util/__init__.py,sha256=lJnQ8fZCma80QVRQeKvY4MQ87oCWu-9KATV3dKJfpDc,80
4
- kim_tools/aflow_util/core.py,sha256=57K2G1jGgJhUA312RkWnhb3MOmlo9B5DdenNb_dIkzc,72206
4
+ kim_tools/aflow_util/core.py,sha256=1oHweHfm1m_7hVD1ziyrWpe9IbkbxFXAj7FKtav8FiI,75538
5
5
  kim_tools/aflow_util/data/README_PROTO.TXT,sha256=bTpcd8GHOkpcQn6YUZzqKhiTytwSDpkgu4boeoogT38,447851
6
6
  kim_tools/ase/__init__.py,sha256=1i6ko5tNr0VZC3T7hoEzq4fnSU0DdxNpxXcSaWMcJWc,76
7
7
  kim_tools/ase/core.py,sha256=d6eOu_HSxVr-ae0TSEbY4HKdePxhNu3yv8NN9VDl-BA,30256
8
8
  kim_tools/symmetry_util/__init__.py,sha256=uu-ZSUDUTe2P81rkAS3tXverx31s_uZ3wL4SD_dn5aI,86
9
- kim_tools/symmetry_util/core.py,sha256=VTYH1MRADraJVc6SBfFHZweWI_WZgCViSKM4MazF7KY,21634
9
+ kim_tools/symmetry_util/core.py,sha256=EED_LYfgwf6mmFwTJlzIwTvf8RUiM29bkzEIQrOqwUw,22271
10
10
  kim_tools/symmetry_util/data/possible_primitive_shifts.json,sha256=4OVNgn3NnykgGlYiAcecERmVWiIZFrmP2LZI3ml_Sh0,25010
11
11
  kim_tools/symmetry_util/data/primitive_GENPOS_ops.json,sha256=FDu4H4PosOpK9yKwOPy3SxbH7xLMOmZfKZ4ItKPMjoQ,224498
12
12
  kim_tools/symmetry_util/data/space_groups_for_each_bravais_lattice.json,sha256=wSNu6d5pH72lJ6Zj5MZ64qzwS_6Fn5WOs0ts7E9uPC4,2507
@@ -14,11 +14,11 @@ kim_tools/symmetry_util/data/wyck_pos_xform_under_normalizer.json,sha256=6g1YuYh
14
14
  kim_tools/symmetry_util/data/wyckoff_multiplicities.json,sha256=qG2RPBd_-ejDIfz-E4ZhkHyRpIboxRy7oiXkdDf5Eg8,32270
15
15
  kim_tools/symmetry_util/data/wyckoff_sets.json,sha256=f5ZpHKDHo6_JWki1b7KUGoYLlhU-44Qikw_-PtbLssw,9248
16
16
  kim_tools/test_driver/__init__.py,sha256=KOiceeZNqkfrgZ66CiRiUdniceDrCmmDXQkOw0wXaCQ,92
17
- kim_tools/test_driver/core.py,sha256=bA1tZPM3dES5PZSanN_xPC-SApSB1usO10EvoIq8EgY,78685
17
+ kim_tools/test_driver/core.py,sha256=N0xnJzF_yF5tav3nqeUyX1NSrJUDigYV6n7Ym4wtzLA,82518
18
18
  kim_tools/vc/__init__.py,sha256=zXjhxXCKVMLBMXXWYG3if7VOpBnsFrn_RjVpnohDm5c,74
19
19
  kim_tools/vc/core.py,sha256=BIjzEExnQAL2S90a_npptRm3ACqAo4fZBtvTDBMWMdw,13963
20
- kim_tools-0.2.2.dist-info/licenses/LICENSE.CDDL,sha256=I2luEED_SHjuZ01B4rYG-AF_135amL24JpHvZ1Jhqe8,16373
21
- kim_tools-0.2.2.dist-info/METADATA,sha256=3OJoiiqV0-dLI_4hq--8wWF5BcedispUTMgZ1Z4ieR8,1460
22
- kim_tools-0.2.2.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
23
- kim_tools-0.2.2.dist-info/top_level.txt,sha256=w_YCpJ5ERigj9te74ln7k64tqj1VumOzM_s9dsalIWY,10
24
- kim_tools-0.2.2.dist-info/RECORD,,
20
+ kim_tools-0.2.3.dist-info/licenses/LICENSE.CDDL,sha256=I2luEED_SHjuZ01B4rYG-AF_135amL24JpHvZ1Jhqe8,16373
21
+ kim_tools-0.2.3.dist-info/METADATA,sha256=Z_rs3Y3nRmX-11yJo8MuGK-GHUXvdhPWdpUPwLQmmFc,1460
22
+ kim_tools-0.2.3.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
23
+ kim_tools-0.2.3.dist-info/top_level.txt,sha256=w_YCpJ5ERigj9te74ln7k64tqj1VumOzM_s9dsalIWY,10
24
+ kim_tools-0.2.3.dist-info/RECORD,,