kim-tools 0.3.7__py3-none-any.whl → 0.3.9__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 +1 -1
- kim_tools/aflow_util/core.py +22 -11
- kim_tools/test_driver/core.py +149 -63
- {kim_tools-0.3.7.dist-info → kim_tools-0.3.9.dist-info}/METADATA +1 -1
- {kim_tools-0.3.7.dist-info → kim_tools-0.3.9.dist-info}/RECORD +8 -8
- {kim_tools-0.3.7.dist-info → kim_tools-0.3.9.dist-info}/WHEEL +0 -0
- {kim_tools-0.3.7.dist-info → kim_tools-0.3.9.dist-info}/licenses/LICENSE.CDDL +0 -0
- {kim_tools-0.3.7.dist-info → kim_tools-0.3.9.dist-info}/top_level.txt +0 -0
kim_tools/__init__.py
CHANGED
kim_tools/aflow_util/core.py
CHANGED
@@ -1547,7 +1547,8 @@ class AFLOW:
|
|
1547
1547
|
cell_rtol: float = 0.01,
|
1548
1548
|
rot_rtol: float = 0.01,
|
1549
1549
|
rot_atol: float = 0.01,
|
1550
|
-
|
1550
|
+
match_library_proto: bool = True,
|
1551
|
+
) -> Union[List[float], Tuple[List[float], Optional[str]]]:
|
1551
1552
|
"""
|
1552
1553
|
Given an Atoms object that is a primitive cell of its Bravais lattice as
|
1553
1554
|
defined in doi.org/10.1016/j.commatsci.2017.01.017, and its presumed prototype
|
@@ -1584,12 +1585,16 @@ class AFLOW:
|
|
1584
1585
|
Parameter to pass to :func:`numpy.allclose` for compariong fractional
|
1585
1586
|
rotations. Default value chosen to be commensurate with AFLOW
|
1586
1587
|
default distance tolerance of 0.01*(NN distance)
|
1588
|
+
match_library_proto:
|
1589
|
+
Whether to attempt matching to library prototypes
|
1587
1590
|
|
1588
1591
|
Returns:
|
1589
1592
|
* List of free parameters that will regenerate `atoms` (up to permutations,
|
1590
1593
|
rotations, and translations) when paired with `prototype_label`
|
1591
|
-
*
|
1592
|
-
|
1594
|
+
* Additionally, if 'match_library_proto' is True (default):
|
1595
|
+
* Library prototype label from the AFLOW prototype encyclopedia, if any
|
1596
|
+
* Title of library prototype from the AFLOW prototype encyclopedia,
|
1597
|
+
if any
|
1593
1598
|
|
1594
1599
|
Raises:
|
1595
1600
|
AFLOW.ChangedSymmetryException:
|
@@ -1636,9 +1641,10 @@ class AFLOW:
|
|
1636
1641
|
"aflow_prototype_label"
|
1637
1642
|
]
|
1638
1643
|
|
1639
|
-
|
1640
|
-
|
1641
|
-
|
1644
|
+
if match_library_proto:
|
1645
|
+
library_prototype_label, short_name = (
|
1646
|
+
self.get_library_prototype_label_and_shortname_from_atoms(atoms)
|
1647
|
+
)
|
1642
1648
|
|
1643
1649
|
# NOTE: Because of below, this only works if the provided prototype label is
|
1644
1650
|
# correctly alphabetized. Change this?
|
@@ -1824,11 +1830,14 @@ class AFLOW:
|
|
1824
1830
|
f"Found set of parameters for prototype {prototype_label} "
|
1825
1831
|
"that is unrotated"
|
1826
1832
|
)
|
1827
|
-
|
1828
|
-
|
1829
|
-
|
1830
|
-
|
1831
|
-
|
1833
|
+
if match_library_proto:
|
1834
|
+
return (
|
1835
|
+
candidate_prototype_param_values,
|
1836
|
+
library_prototype_label,
|
1837
|
+
short_name,
|
1838
|
+
)
|
1839
|
+
else:
|
1840
|
+
return candidate_prototype_param_values
|
1832
1841
|
else:
|
1833
1842
|
logger.info(
|
1834
1843
|
f"Found set of parameters for prototype {prototype_label}, "
|
@@ -1902,7 +1911,9 @@ class AFLOW:
|
|
1902
1911
|
cell_lengths_and_angles = ref_atoms.cell.cellpar()
|
1903
1912
|
|
1904
1913
|
test_atoms_copy = test_atoms.copy()
|
1914
|
+
del test_atoms_copy.constraints
|
1905
1915
|
ref_atoms_copy = ref_atoms.copy()
|
1916
|
+
del ref_atoms_copy.constraints
|
1906
1917
|
|
1907
1918
|
test_atoms_copy.set_cell(
|
1908
1919
|
Cell.fromcellpar(cell_lengths_and_angles), scale_atoms=True
|
kim_tools/test_driver/core.py
CHANGED
@@ -30,6 +30,7 @@
|
|
30
30
|
Helper classes for KIM Test Drivers
|
31
31
|
|
32
32
|
"""
|
33
|
+
import glob
|
33
34
|
import json
|
34
35
|
import logging
|
35
36
|
import os
|
@@ -64,6 +65,7 @@ from kim_query import raw_query
|
|
64
65
|
from ..aflow_util import (
|
65
66
|
AFLOW,
|
66
67
|
get_space_group_number_from_prototype,
|
68
|
+
get_stoich_reduced_list_from_prototype,
|
67
69
|
prototype_labels_are_equivalent,
|
68
70
|
)
|
69
71
|
from ..aflow_util.core import AFLOW_EXECUTABLE, get_atom_indices_for_each_wyckoff_orb
|
@@ -139,8 +141,8 @@ def minimize_wrapper(
|
|
139
141
|
steps: int = MAXSTEPS_INITIAL,
|
140
142
|
variable_cell: bool = True,
|
141
143
|
logfile: Optional[Union[str, IO]] = "kim-tools.log",
|
142
|
-
algorithm: Optimizer = LBFGSLineSearch,
|
143
|
-
cell_filter: UnitCellFilter = FrechetCellFilter,
|
144
|
+
algorithm: type[Optimizer] = LBFGSLineSearch,
|
145
|
+
cell_filter: type[UnitCellFilter] = FrechetCellFilter,
|
144
146
|
fix_symmetry: Union[bool, FixSymmetry] = False,
|
145
147
|
opt_kwargs: Dict = {},
|
146
148
|
flt_kwargs: Dict = {},
|
@@ -191,12 +193,13 @@ def minimize_wrapper(
|
|
191
193
|
Returns:
|
192
194
|
Whether the minimization succeeded
|
193
195
|
"""
|
196
|
+
existing_constraints = atoms.constraints
|
194
197
|
if fix_symmetry is not False:
|
195
198
|
if fix_symmetry is True:
|
196
199
|
symmetry = FixSymmetry(atoms)
|
197
200
|
else:
|
198
201
|
symmetry = fix_symmetry
|
199
|
-
atoms.set_constraint(symmetry)
|
202
|
+
atoms.set_constraint([symmetry] + existing_constraints)
|
200
203
|
if variable_cell:
|
201
204
|
supercell_wrapped = cell_filter(atoms, **flt_kwargs)
|
202
205
|
opt = algorithm(supercell_wrapped, logfile=logfile, **opt_kwargs)
|
@@ -228,7 +231,7 @@ def minimize_wrapper(
|
|
228
231
|
+ " steps."
|
229
232
|
)
|
230
233
|
|
231
|
-
|
234
|
+
atoms.set_constraint(existing_constraints)
|
232
235
|
|
233
236
|
if minimization_stalled or iteration_limits_reached:
|
234
237
|
try:
|
@@ -242,7 +245,7 @@ def minimize_wrapper(
|
|
242
245
|
"trying to evaluate final forces and stress:"
|
243
246
|
)
|
244
247
|
logger.info(repr(e))
|
245
|
-
|
248
|
+
return False
|
246
249
|
else:
|
247
250
|
return True
|
248
251
|
|
@@ -738,8 +741,20 @@ class KIMTestDriver(ABC):
|
|
738
741
|
@property
|
739
742
|
def _calc(self) -> Optional[Calculator]:
|
740
743
|
"""
|
741
|
-
Get the ASE calculator
|
744
|
+
Get the ASE calculator. Reinstantiate it if it's a KIM SM
|
742
745
|
"""
|
746
|
+
if self.__kim_model_name is not None:
|
747
|
+
reinst = False
|
748
|
+
if hasattr(self.__calc, "clean"):
|
749
|
+
self.__calc.clean()
|
750
|
+
reinst = True
|
751
|
+
if hasattr(self.__calc, "__del__"):
|
752
|
+
self.__calc.__del__()
|
753
|
+
reinst = True
|
754
|
+
if reinst:
|
755
|
+
from ase.calculators.kim.kim import KIM
|
756
|
+
|
757
|
+
self.__calc = KIM(self.__kim_model_name)
|
743
758
|
return self.__calc
|
744
759
|
|
745
760
|
def _get_serialized_property_instances(self) -> str:
|
@@ -757,17 +772,21 @@ class KIMTestDriver(ABC):
|
|
757
772
|
def write_property_instances_to_file(self, filename="output/results.edn") -> None:
|
758
773
|
"""
|
759
774
|
Write internal property instances (possibly accumulated over several calls to
|
760
|
-
the Test Driver) to a file at the requested path.
|
761
|
-
the same directory.
|
775
|
+
the Test Driver) to a file at the requested path.
|
762
776
|
|
763
777
|
Args:
|
764
778
|
filename: path to write the file
|
765
779
|
"""
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
780
|
+
kim_property_dump(self._get_serialized_property_instances(), filename)
|
781
|
+
filename_parent = Path(filename).parent.resolve()
|
782
|
+
if filename_parent != Path("output").resolve():
|
783
|
+
for file_in_output in glob.glob("output/*"):
|
784
|
+
file_in_output_name = str(Path(file_in_output).name)
|
785
|
+
for instance in self.property_instances:
|
786
|
+
for key in instance:
|
787
|
+
if isinstance(instance[key], dict):
|
788
|
+
if file_in_output_name == instance[key]["source-value"]:
|
789
|
+
shutil.move(file_in_output, filename_parent)
|
771
790
|
|
772
791
|
def get_isolated_energy_per_atom(self, symbol: str) -> float:
|
773
792
|
"""
|
@@ -802,6 +821,7 @@ def _add_common_crystal_genome_keys_to_current_property_instance(
|
|
802
821
|
temperature_unit: Optional[str] = "K",
|
803
822
|
crystal_genome_source_structure_id: Optional[List[List[str]]] = None,
|
804
823
|
aflow_executable: str = AFLOW_EXECUTABLE,
|
824
|
+
omit_keys: Optional[List[str]] = None,
|
805
825
|
) -> str:
|
806
826
|
"""
|
807
827
|
Write common Crystal Genome keys to the last element of ``property_instances``. See
|
@@ -815,19 +835,26 @@ def _add_common_crystal_genome_keys_to_current_property_instance(
|
|
815
835
|
The key will be added to the last dictionary in the list
|
816
836
|
aflow_executable:
|
817
837
|
Path to the AFLOW executable
|
838
|
+
omit_keys:
|
839
|
+
Which keys to omit writing
|
818
840
|
|
819
841
|
Returns:
|
820
842
|
Updated EDN-serialized list of property instances
|
821
843
|
"""
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
property_instances
|
830
|
-
|
844
|
+
if omit_keys is None:
|
845
|
+
omit_keys = []
|
846
|
+
if "prototype-label" not in omit_keys:
|
847
|
+
property_instances = _add_key_to_current_property_instance(
|
848
|
+
property_instances, "prototype-label", prototype_label
|
849
|
+
)
|
850
|
+
if "stoichiometric-species" not in omit_keys:
|
851
|
+
property_instances = _add_key_to_current_property_instance(
|
852
|
+
property_instances, "stoichiometric-species", stoichiometric_species
|
853
|
+
)
|
854
|
+
if "a" not in omit_keys:
|
855
|
+
property_instances = _add_key_to_current_property_instance(
|
856
|
+
property_instances, "a", a, a_unit
|
857
|
+
)
|
831
858
|
|
832
859
|
# get parameter names
|
833
860
|
aflow = AFLOW(aflow_executable=aflow_executable)
|
@@ -844,24 +871,28 @@ def _add_common_crystal_genome_keys_to_current_property_instance(
|
|
844
871
|
"Incorrect number of parameter_values (i.e. dimensionless parameters "
|
845
872
|
"besides a) for the provided prototype"
|
846
873
|
)
|
847
|
-
|
848
|
-
property_instances
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
874
|
+
if "parameter-names" not in omit_keys:
|
875
|
+
property_instances = _add_key_to_current_property_instance(
|
876
|
+
property_instances, "parameter-names", aflow_parameter_names[1:]
|
877
|
+
)
|
878
|
+
if "parameter-values" not in omit_keys:
|
879
|
+
property_instances = _add_key_to_current_property_instance(
|
880
|
+
property_instances, "parameter-values", parameter_values
|
881
|
+
)
|
853
882
|
|
854
883
|
if short_name is not None:
|
855
884
|
if not isinstance(short_name, list):
|
856
885
|
short_name = [short_name]
|
857
|
-
|
858
|
-
property_instances
|
859
|
-
|
886
|
+
if "short-name" not in omit_keys:
|
887
|
+
property_instances = _add_key_to_current_property_instance(
|
888
|
+
property_instances, "short-name", short_name
|
889
|
+
)
|
860
890
|
|
861
891
|
if library_prototype_label is not None:
|
862
|
-
|
863
|
-
property_instances
|
864
|
-
|
892
|
+
if "library-prototype-label" not in omit_keys:
|
893
|
+
property_instances = _add_key_to_current_property_instance(
|
894
|
+
property_instances, "library-prototype-label", library_prototype_label
|
895
|
+
)
|
865
896
|
|
866
897
|
if cell_cauchy_stress is not None:
|
867
898
|
if len(cell_cauchy_stress) != 6:
|
@@ -870,27 +901,30 @@ def _add_common_crystal_genome_keys_to_current_property_instance(
|
|
870
901
|
"order [xx, yy, zz, yz, xz, xy]"
|
871
902
|
)
|
872
903
|
if cell_cauchy_stress_unit is None:
|
873
|
-
raise
|
874
|
-
|
875
|
-
property_instances
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
904
|
+
raise KIMTestDriverError("Please provide a `cell_cauchy_stress_unit`")
|
905
|
+
if "cell-cauchy-stress" not in omit_keys:
|
906
|
+
property_instances = _add_key_to_current_property_instance(
|
907
|
+
property_instances,
|
908
|
+
"cell-cauchy-stress",
|
909
|
+
cell_cauchy_stress,
|
910
|
+
cell_cauchy_stress_unit,
|
911
|
+
)
|
880
912
|
|
881
913
|
if temperature is not None:
|
882
914
|
if temperature_unit is None:
|
883
|
-
raise
|
884
|
-
|
885
|
-
property_instances
|
886
|
-
|
915
|
+
raise KIMTestDriverError("Please provide a `temperature_unit`")
|
916
|
+
if "temperature" not in omit_keys:
|
917
|
+
property_instances = _add_key_to_current_property_instance(
|
918
|
+
property_instances, "temperature", temperature, temperature_unit
|
919
|
+
)
|
887
920
|
|
888
921
|
if crystal_genome_source_structure_id is not None:
|
889
|
-
|
890
|
-
property_instances
|
891
|
-
|
892
|
-
|
893
|
-
|
922
|
+
if "crystal-genome-source-structure-id" not in omit_keys:
|
923
|
+
property_instances = _add_key_to_current_property_instance(
|
924
|
+
property_instances,
|
925
|
+
"crystal-genome-source-structure-id",
|
926
|
+
crystal_genome_source_structure_id,
|
927
|
+
)
|
894
928
|
|
895
929
|
return property_instances
|
896
930
|
|
@@ -912,6 +946,7 @@ def _add_property_instance_and_common_crystal_genome_keys(
|
|
912
946
|
disclaimer: Optional[str] = None,
|
913
947
|
property_instances: Optional[str] = None,
|
914
948
|
aflow_executable: str = AFLOW_EXECUTABLE,
|
949
|
+
omit_keys: Optional[List[str]] = None,
|
915
950
|
) -> str:
|
916
951
|
"""
|
917
952
|
Initialize a new property instance to ``property_instances`` (an empty
|
@@ -934,6 +969,8 @@ def _add_property_instance_and_common_crystal_genome_keys(
|
|
934
969
|
A pre-existing EDN-serialized list of KIM Property instances to add to
|
935
970
|
aflow_executable:
|
936
971
|
Path to the AFLOW executable
|
972
|
+
omit_keys:
|
973
|
+
Which keys to omit writing
|
937
974
|
|
938
975
|
Returns:
|
939
976
|
Updated EDN-serialized list of property instances
|
@@ -956,6 +993,7 @@ def _add_property_instance_and_common_crystal_genome_keys(
|
|
956
993
|
cell_cauchy_stress_unit=cell_cauchy_stress_unit,
|
957
994
|
cell_cauchy_stress=cell_cauchy_stress,
|
958
995
|
aflow_executable=aflow_executable,
|
996
|
+
omit_keys=omit_keys,
|
959
997
|
)
|
960
998
|
|
961
999
|
|
@@ -1289,17 +1327,28 @@ class SingleCrystalTestDriver(KIMTestDriver):
|
|
1289
1327
|
crystal_structure = get_crystal_structure_from_atoms(
|
1290
1328
|
atoms=material, aflow_executable=self.aflow_executable
|
1291
1329
|
)
|
1330
|
+
aflow = AFLOW()
|
1331
|
+
atoms_rebuilt = get_atoms_from_crystal_structure(crystal_structure)
|
1332
|
+
_, self.__input_rotation, _, _ = (
|
1333
|
+
aflow.get_basistransformation_rotation_originshift_atom_map_from_atoms(
|
1334
|
+
atoms_rebuilt,
|
1335
|
+
material,
|
1336
|
+
)
|
1337
|
+
)
|
1292
1338
|
msg = (
|
1293
|
-
"Rebuilding
|
1339
|
+
"Rebuilding Atoms object in a standard setting defined by "
|
1294
1340
|
"doi.org/10.1016/j.commatsci.2017.01.017. See log file or computed "
|
1295
1341
|
"properties for the (possibly re-oriented) primitive cell that "
|
1296
|
-
"computations will be based on."
|
1342
|
+
"computations will be based on. To obtain the rotation of this "
|
1343
|
+
"cell relative to the Atoms object you provided, use "
|
1344
|
+
f"{self.__class__.__name__}.get_input_rotation()"
|
1297
1345
|
)
|
1298
1346
|
logger.info(msg)
|
1299
1347
|
print()
|
1300
1348
|
print(msg)
|
1301
1349
|
print()
|
1302
1350
|
else:
|
1351
|
+
self.__input_rotation = None
|
1303
1352
|
crystal_structure = material
|
1304
1353
|
|
1305
1354
|
# Pop the temperature and stress keys in case they came along with a query
|
@@ -1412,9 +1461,7 @@ class SingleCrystalTestDriver(KIMTestDriver):
|
|
1412
1461
|
(aflow_parameter_values, library_prototype_label, short_name) = (
|
1413
1462
|
aflow.solve_for_params_of_known_prototype(
|
1414
1463
|
atoms=atoms,
|
1415
|
-
prototype_label=self.
|
1416
|
-
"prototype-label"
|
1417
|
-
]["source-value"],
|
1464
|
+
prototype_label=self.get_nominal_prototype_label(),
|
1418
1465
|
max_resid=max_resid,
|
1419
1466
|
cell_rtol=cell_rtol,
|
1420
1467
|
rot_rtol=rot_rtol,
|
@@ -1514,6 +1561,7 @@ class SingleCrystalTestDriver(KIMTestDriver):
|
|
1514
1561
|
stress_unit: Optional[str] = None,
|
1515
1562
|
temp_unit: str = "K",
|
1516
1563
|
disclaimer: Optional[str] = None,
|
1564
|
+
omit_keys: Optional[List[str]] = None,
|
1517
1565
|
) -> None:
|
1518
1566
|
"""
|
1519
1567
|
Initialize a new property instance to ``self.property_instances``. It will
|
@@ -1544,6 +1592,8 @@ class SingleCrystalTestDriver(KIMTestDriver):
|
|
1544
1592
|
disclaimer:
|
1545
1593
|
An optional disclaimer commenting on the applicability of this result,
|
1546
1594
|
e.g. "This relaxation did not reach the desired tolerance."
|
1595
|
+
omit_keys:
|
1596
|
+
Which keys to omit writing
|
1547
1597
|
"""
|
1548
1598
|
crystal_structure = self.__nominal_crystal_structure_npt
|
1549
1599
|
|
@@ -1642,17 +1692,22 @@ class SingleCrystalTestDriver(KIMTestDriver):
|
|
1642
1692
|
disclaimer=disclaimer,
|
1643
1693
|
property_instances=super()._get_serialized_property_instances(),
|
1644
1694
|
aflow_executable=self.aflow_executable,
|
1695
|
+
omit_keys=omit_keys,
|
1645
1696
|
)
|
1646
1697
|
)
|
1647
1698
|
|
1648
|
-
|
1649
|
-
|
1650
|
-
|
1651
|
-
|
1652
|
-
|
1653
|
-
|
1654
|
-
|
1655
|
-
|
1699
|
+
if omit_keys is None:
|
1700
|
+
omit_keys = []
|
1701
|
+
if "coordinates-file" not in omit_keys:
|
1702
|
+
self.__add_poscar_to_curr_prop_inst(
|
1703
|
+
"primitive", "instance.poscar", "coordinates-file"
|
1704
|
+
)
|
1705
|
+
if "coordinates-file-conventional" not in omit_keys:
|
1706
|
+
self.__add_poscar_to_curr_prop_inst(
|
1707
|
+
"conventional",
|
1708
|
+
"conventional.instance.poscar",
|
1709
|
+
"coordinates-file-conventional",
|
1710
|
+
)
|
1656
1711
|
|
1657
1712
|
def _get_temperature(self, unit: str = "K") -> float:
|
1658
1713
|
"""
|
@@ -1888,6 +1943,25 @@ class SingleCrystalTestDriver(KIMTestDriver):
|
|
1888
1943
|
"source-value"
|
1889
1944
|
]
|
1890
1945
|
|
1946
|
+
def get_nominal_space_group_number(self) -> int:
|
1947
|
+
return get_space_group_number_from_prototype(self.get_nominal_prototype_label())
|
1948
|
+
|
1949
|
+
def get_stoichiometry(self) -> List[int]:
|
1950
|
+
return get_stoich_reduced_list_from_prototype(
|
1951
|
+
self.get_nominal_prototype_label()
|
1952
|
+
)
|
1953
|
+
|
1954
|
+
def get_nominal_parameter_names(self) -> List[str]:
|
1955
|
+
"""
|
1956
|
+
Get the list of parameter names besides "a". Return an
|
1957
|
+
empty list for cubic crystals
|
1958
|
+
"""
|
1959
|
+
crystal_structure = self._get_nominal_crystal_structure_npt()
|
1960
|
+
if "parameter-names" in crystal_structure:
|
1961
|
+
return crystal_structure["parameter-names"]["source-value"]
|
1962
|
+
else:
|
1963
|
+
return []
|
1964
|
+
|
1891
1965
|
def get_atom_indices_for_each_wyckoff_orb(self) -> List[Dict]:
|
1892
1966
|
"""
|
1893
1967
|
Get a list of dictionaries containing the atom indices of each Wyckoff
|
@@ -1899,6 +1973,18 @@ class SingleCrystalTestDriver(KIMTestDriver):
|
|
1899
1973
|
"""
|
1900
1974
|
return get_atom_indices_for_each_wyckoff_orb(self.get_nominal_prototype_label())
|
1901
1975
|
|
1976
|
+
def get_input_rotation(self) -> Optional[npt.ArrayLike]:
|
1977
|
+
"""
|
1978
|
+
Returns:
|
1979
|
+
If the Test Driver was called with an Atoms object, the nominal crystal
|
1980
|
+
structure may be rotated w.r.t. the input.
|
1981
|
+
This returns the Cartesian rotation to transform the Atoms input to the
|
1982
|
+
internal nominal crystal structure. I.e., if you want to get computed
|
1983
|
+
tensor properties in the same orientation as your input, you should
|
1984
|
+
rotate the reported tensors by the transpose of this rotation.
|
1985
|
+
"""
|
1986
|
+
return self.__input_rotation
|
1987
|
+
|
1902
1988
|
|
1903
1989
|
def query_crystal_structures(
|
1904
1990
|
stoichiometric_species: List[str],
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: kim-tools
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.9
|
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>, Philipp Hoellmer <ph2484@nyu.edu>, Guanming Zhang <gz2241@nyu.edu>, Tom Egg <tje3676@nyu.edu>
|
6
6
|
Maintainer-email: ilia Nikiforov <nikif002@umn.edu>
|
@@ -1,7 +1,7 @@
|
|
1
|
-
kim_tools/__init__.py,sha256=
|
1
|
+
kim_tools/__init__.py,sha256=JnYWdvQufTnlREvqTcBFv0ZQoOwdekELyzJCKwE7XTI,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=
|
4
|
+
kim_tools/aflow_util/core.py,sha256=PM-ww2zoZXksGHbyPKW54v8r1bignJvFhDByx7Qm1ac,80837
|
5
5
|
kim_tools/aflow_util/aflow_prototype_encyclopedia/data/A108B24C11D24_cP334_222_h4i_i_bf_i-001/info.json,sha256=IsFiO9X2Ko7yoq2QkDurUVP7k1BE4WFgblu7oxl6iZs,2013
|
6
6
|
kim_tools/aflow_util/aflow_prototype_encyclopedia/data/A10B11_tI84_139_dehim_eh2n-001/info.json,sha256=f1EdtouuSL2y9NNw40Rvz2J9ZZcsqQBcyEmlHj6XoW8,1186
|
7
7
|
kim_tools/aflow_util/aflow_prototype_encyclopedia/data/A10B2C_hP39_171_5c_c_a-001/info.json,sha256=vD1xjZKWShL0E6XNsSlmIhilGcGNefl56oQDLQlHO1M,1596
|
@@ -2023,11 +2023,11 @@ kim_tools/symmetry_util/data/wyck_pos_xform_under_normalizer.json,sha256=6g1YuYh
|
|
2023
2023
|
kim_tools/symmetry_util/data/wyckoff_multiplicities.json,sha256=qG2RPBd_-ejDIfz-E4ZhkHyRpIboxRy7oiXkdDf5Eg8,32270
|
2024
2024
|
kim_tools/symmetry_util/data/wyckoff_sets.json,sha256=f5ZpHKDHo6_JWki1b7KUGoYLlhU-44Qikw_-PtbLssw,9248
|
2025
2025
|
kim_tools/test_driver/__init__.py,sha256=KOiceeZNqkfrgZ66CiRiUdniceDrCmmDXQkOw0wXaCQ,92
|
2026
|
-
kim_tools/test_driver/core.py,sha256=
|
2026
|
+
kim_tools/test_driver/core.py,sha256=sM0SPmNFuYVdvKbmCM3kJblFs5--k1xRm57FdUtgs34,97367
|
2027
2027
|
kim_tools/vc/__init__.py,sha256=zXjhxXCKVMLBMXXWYG3if7VOpBnsFrn_RjVpnohDm5c,74
|
2028
2028
|
kim_tools/vc/core.py,sha256=BIjzEExnQAL2S90a_npptRm3ACqAo4fZBtvTDBMWMdw,13963
|
2029
|
-
kim_tools-0.3.
|
2030
|
-
kim_tools-0.3.
|
2031
|
-
kim_tools-0.3.
|
2032
|
-
kim_tools-0.3.
|
2033
|
-
kim_tools-0.3.
|
2029
|
+
kim_tools-0.3.9.dist-info/licenses/LICENSE.CDDL,sha256=I2luEED_SHjuZ01B4rYG-AF_135amL24JpHvZ1Jhqe8,16373
|
2030
|
+
kim_tools-0.3.9.dist-info/METADATA,sha256=mz0naaggDlfsGZXT1jSq9MbwQIaz3r8PkfKIO2DEw94,2032
|
2031
|
+
kim_tools-0.3.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
2032
|
+
kim_tools-0.3.9.dist-info/top_level.txt,sha256=w_YCpJ5ERigj9te74ln7k64tqj1VumOzM_s9dsalIWY,10
|
2033
|
+
kim_tools-0.3.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|