From 3e06cd8642ca84f87cad560bba8c47b3543630bc Mon Sep 17 00:00:00 2001 From: CompRhys Date: Wed, 17 Jul 2024 09:45:08 -0400 Subject: [PATCH] fea: add count sites method --- aviary/wren/utils.py | 50 +- .../wren/wyckoff-position-multiplicities.json | 3462 ++++++++--------- tests/test_wyckoff_ops.py | 20 +- 3 files changed, 1785 insertions(+), 1747 deletions(-) diff --git a/aviary/wren/utils.py b/aviary/wren/utils.py index c320a7c2..c81aba59 100644 --- a/aviary/wren/utils.py +++ b/aviary/wren/utils.py @@ -91,7 +91,7 @@ def count_values_for_wyckoff( lookup_dict: dict[str, dict[str, int]], ): """Count values from a lookup table and scale by wyckoff multiplicities.""" - return sum(float(n) * lookup_dict[spg][k] for n, k in zip(multiplicity, wyckoff)) + return sum(int(n) * lookup_dict[spg][k] for n, k in zip(multiplicity, wyckoff)) def get_aflow_label_from_aflow( @@ -267,16 +267,12 @@ def get_aflow_label_from_spg_analyzer( for el, g in groupby( equivalent_wyckoff_labels, key=lambda x: x[1] ): # sort alphabetically by element - lg = list(g) - elem_dict[el] = sum( - float(wyckoff_multiplicity_dict[str(spg_num)][e[2]]) for e in lg - ) + lg = list(g) # NOTE create a list from the iterator so that we can reuse it + elem_dict[el] = sum(wyckoff_multiplicity_dict[str(spg_num)][e[2]] for e in lg) wyks = "" - for wyk, w in groupby( - lg, key=lambda x: x[2] - ): # sort alphabetically by wyckoff letter - lw = list(w) - wyks += f"{len(lw)}{wyk}" + # sort groups alphabetically by wyckoff letter + for wyk, w in groupby(lg, key=lambda x: x[2]): + wyks += f"{len(list(w))}{wyk}" elem_wyks.append(wyks) # canonicalize the possible wyckoff letter sequences @@ -438,7 +434,7 @@ def count_wyckoff_positions(aflow_label: str) -> int: def count_crystal_dof(aflow_label: str) -> int: - """Count number of free parameters coarse-grained in Wyckoff representation: how + """Count number of free parameters in coarse-grained Wyckoff representation: how many degrees of freedom would remain to optimize during a crystal structure relaxation. @@ -471,6 +467,36 @@ def count_crystal_dof(aflow_label: str) -> int: return n_params +def count_crystal_sites(aflow_label: str) -> int: + """Count number of sites from Wyckoff representation. + + Args: + aflow_label (str): AFLOW-style prototype label with appended chemical system + + Returns: + int: Number of free-parameters in given prototype + """ + n_params = 0 + + aflow_label, _ = aflow_label.split(":") # chop off chemical system + _, pearson, spg, *wyks = aflow_label.split("_") + + for wyk_letters_per_elem in wyks: + # normalize Wyckoff letters to start with 1 if missing digit + wyk_letters_normalized = re.sub( + RE_WYCKOFF_NO_PREFIX, RE_SUBST_ONE_PREFIX, wyk_letters_per_elem + ) + sep_el_wyks = split_alpha_numeric(wyk_letters_normalized) + n_params += count_values_for_wyckoff( + sep_el_wyks["alpha"], + sep_el_wyks["numeric"], + spg, + wyckoff_multiplicity_dict, + ) + + return int(n_params) + + def get_isopointal_proto_from_aflow(aflow_label: str) -> str: """Get a canonicalized string for the prototype. @@ -668,7 +694,7 @@ def get_random_structure_for_protostructure(protostructure: str, **kwargs) -> St species_counts = [ sum( - int(wyckoff_multiplicity_dict[spg][w]) * int(m) + wyckoff_multiplicity_dict[spg][w] * int(m) for m, w in zip(d["numeric"], d["alpha"]) ) for d in sep_el_wyks diff --git a/aviary/wren/wyckoff-position-multiplicities.json b/aviary/wren/wyckoff-position-multiplicities.json index 3eec103c..bd79dbab 100644 --- a/aviary/wren/wyckoff-position-multiplicities.json +++ b/aviary/wren/wyckoff-position-multiplicities.json @@ -1,2194 +1,2194 @@ { "0": {}, "1": { - "a": "1" + "a": 1 }, "2": { - "i": "2", - "h": "1", - "g": "1", - "f": "1", - "e": "1", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "i": 2, + "h": 1, + "g": 1, + "f": 1, + "e": 1, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "3": { - "e": "2", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "e": 2, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "4": { - "a": "2" + "a": 2 }, "5": { - "c": "4", - "b": "2", - "a": "2" + "c": 4, + "b": 2, + "a": 2 }, "6": { - "c": "2", - "b": "1", - "a": "1" + "c": 2, + "b": 1, + "a": 1 }, "7": { - "a": "2" + "a": 2 }, "8": { - "b": "4", - "a": "2" + "b": 4, + "a": 2 }, "9": { - "a": "4" + "a": 4 }, "10": { - "o": "4", - "n": "2", - "m": "2", - "l": "2", - "k": "2", - "j": "2", - "i": "2", - "h": "1", - "g": "1", - "f": "1", - "e": "1", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "o": 4, + "n": 2, + "m": 2, + "l": 2, + "k": 2, + "j": 2, + "i": 2, + "h": 1, + "g": 1, + "f": 1, + "e": 1, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "11": { - "f": "4", - "e": "2", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "f": 4, + "e": 2, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "12": { - "j": "8", - "i": "4", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "j": 8, + "i": 4, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "13": { - "g": "4", - "f": "2", - "e": "2", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "g": 4, + "f": 2, + "e": 2, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "14": { - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "15": { - "f": "8", - "e": "4", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "f": 8, + "e": 4, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "16": { - "u": "4", - "t": "2", - "s": "2", - "r": "2", - "q": "2", - "p": "2", - "o": "2", - "n": "2", - "m": "2", - "l": "2", - "k": "2", - "j": "2", - "i": "2", - "h": "1", - "g": "1", - "f": "1", - "e": "1", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "u": 4, + "t": 2, + "s": 2, + "r": 2, + "q": 2, + "p": 2, + "o": 2, + "n": 2, + "m": 2, + "l": 2, + "k": 2, + "j": 2, + "i": 2, + "h": 1, + "g": 1, + "f": 1, + "e": 1, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "17": { - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "18": { - "c": "4", - "b": "2", - "a": "2" + "c": 4, + "b": 2, + "a": 2 }, "19": { - "a": "4" + "a": 4 }, "20": { - "c": "8", - "b": "4", - "a": "4" + "c": 8, + "b": 4, + "a": 4 }, "21": { - "l": "8", - "k": "4", - "j": "4", - "i": "4", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "l": 8, + "k": 4, + "j": 4, + "i": 4, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "22": { - "k": "16", - "j": "8", - "i": "8", - "h": "8", - "g": "8", - "f": "8", - "e": "8", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "k": 16, + "j": 8, + "i": 8, + "h": 8, + "g": 8, + "f": 8, + "e": 8, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "23": { - "k": "8", - "j": "4", - "i": "4", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "k": 8, + "j": 4, + "i": 4, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "24": { - "d": "8", - "c": "4", - "b": "4", - "a": "4" + "d": 8, + "c": 4, + "b": 4, + "a": 4 }, "25": { - "i": "4", - "h": "2", - "g": "2", - "f": "2", - "e": "2", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "i": 4, + "h": 2, + "g": 2, + "f": 2, + "e": 2, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "26": { - "c": "4", - "b": "2", - "a": "2" + "c": 4, + "b": 2, + "a": 2 }, "27": { - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "28": { - "d": "4", - "c": "2", - "b": "2", - "a": "2" + "d": 4, + "c": 2, + "b": 2, + "a": 2 }, "29": { - "a": "4" + "a": 4 }, "30": { - "c": "4", - "b": "2", - "a": "2" + "c": 4, + "b": 2, + "a": 2 }, "31": { - "b": "4", - "a": "2" + "b": 4, + "a": 2 }, "32": { - "c": "4", - "b": "2", - "a": "2" + "c": 4, + "b": 2, + "a": 2 }, "33": { - "a": "4" + "a": 4 }, "34": { - "c": "4", - "b": "2", - "a": "2" + "c": 4, + "b": 2, + "a": 2 }, "35": { - "f": "8", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "f": 8, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "36": { - "b": "8", - "a": "4" + "b": 8, + "a": 4 }, "37": { - "d": "8", - "c": "4", - "b": "4", - "a": "4" + "d": 8, + "c": 4, + "b": 4, + "a": 4 }, "38": { - "f": "8", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "f": 8, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "39": { - "d": "8", - "c": "4", - "b": "4", - "a": "4" + "d": 8, + "c": 4, + "b": 4, + "a": 4 }, "40": { - "c": "8", - "b": "4", - "a": "4" + "c": 8, + "b": 4, + "a": 4 }, "41": { - "b": "8", - "a": "4" + "b": 8, + "a": 4 }, "42": { - "e": "16", - "d": "8", - "c": "8", - "b": "8", - "a": "4" + "e": 16, + "d": 8, + "c": 8, + "b": 8, + "a": 4 }, "43": { - "b": "16", - "a": "8" + "b": 16, + "a": 8 }, "44": { - "e": "8", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "e": 8, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "45": { - "c": "8", - "b": "4", - "a": "4" + "c": 8, + "b": 4, + "a": 4 }, "46": { - "c": "8", - "b": "4", - "a": "4" + "c": 8, + "b": 4, + "a": 4 }, "47": { - "A": "8", - "z": "4", - "y": "4", - "x": "4", - "w": "4", - "v": "4", - "u": "4", - "t": "2", - "s": "2", - "r": "2", - "q": "2", - "p": "2", - "o": "2", - "n": "2", - "m": "2", - "l": "2", - "k": "2", - "j": "2", - "i": "2", - "h": "1", - "g": "1", - "f": "1", - "e": "1", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "A": 8, + "z": 4, + "y": 4, + "x": 4, + "w": 4, + "v": 4, + "u": 4, + "t": 2, + "s": 2, + "r": 2, + "q": 2, + "p": 2, + "o": 2, + "n": 2, + "m": 2, + "l": 2, + "k": 2, + "j": 2, + "i": 2, + "h": 1, + "g": 1, + "f": 1, + "e": 1, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "48": { - "m": "8", - "l": "4", - "k": "4", - "j": "4", - "i": "4", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "m": 8, + "l": 4, + "k": 4, + "j": 4, + "i": 4, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "49": { - "r": "8", - "q": "4", - "p": "4", - "o": "4", - "n": "4", - "m": "4", - "l": "4", - "k": "4", - "j": "4", - "i": "4", - "h": "2", - "g": "2", - "f": "2", - "e": "2", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "r": 8, + "q": 4, + "p": 4, + "o": 4, + "n": 4, + "m": 4, + "l": 4, + "k": 4, + "j": 4, + "i": 4, + "h": 2, + "g": 2, + "f": 2, + "e": 2, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "50": { - "m": "8", - "l": "4", - "k": "4", - "j": "4", - "i": "4", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "m": 8, + "l": 4, + "k": 4, + "j": 4, + "i": 4, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "51": { - "l": "8", - "k": "4", - "j": "4", - "i": "4", - "h": "4", - "g": "4", - "f": "2", - "e": "2", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "l": 8, + "k": 4, + "j": 4, + "i": 4, + "h": 4, + "g": 4, + "f": 2, + "e": 2, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "52": { - "e": "8", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "e": 8, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "53": { - "i": "8", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "i": 8, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "54": { - "f": "8", - "e": "4", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "f": 8, + "e": 4, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "55": { - "i": "8", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "i": 8, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "56": { - "e": "8", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "e": 8, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "57": { - "e": "8", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "e": 8, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "58": { - "h": "8", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "h": 8, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "59": { - "g": "8", - "f": "4", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "g": 8, + "f": 4, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "60": { - "d": "8", - "c": "4", - "b": "4", - "a": "4" + "d": 8, + "c": 4, + "b": 4, + "a": 4 }, "61": { - "c": "8", - "b": "4", - "a": "4" + "c": 8, + "b": 4, + "a": 4 }, "62": { - "d": "8", - "c": "4", - "b": "4", - "a": "4" + "d": 8, + "c": 4, + "b": 4, + "a": 4 }, "63": { - "h": "16", - "g": "8", - "f": "8", - "e": "8", - "d": "8", - "c": "4", - "b": "4", - "a": "4" + "h": 16, + "g": 8, + "f": 8, + "e": 8, + "d": 8, + "c": 4, + "b": 4, + "a": 4 }, "64": { - "g": "16", - "f": "8", - "e": "8", - "d": "8", - "c": "8", - "b": "4", - "a": "4" + "g": 16, + "f": 8, + "e": 8, + "d": 8, + "c": 8, + "b": 4, + "a": 4 }, "65": { - "r": "16", - "q": "8", - "p": "8", - "o": "8", - "n": "8", - "m": "8", - "l": "4", - "k": "4", - "j": "4", - "i": "4", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "r": 16, + "q": 8, + "p": 8, + "o": 8, + "n": 8, + "m": 8, + "l": 4, + "k": 4, + "j": 4, + "i": 4, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "66": { - "m": "16", - "l": "8", - "k": "8", - "j": "8", - "i": "8", - "h": "8", - "g": "8", - "f": "4", - "e": "4", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "m": 16, + "l": 8, + "k": 8, + "j": 8, + "i": 8, + "h": 8, + "g": 8, + "f": 4, + "e": 4, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "67": { - "o": "16", - "n": "8", - "m": "8", - "l": "8", - "k": "8", - "j": "8", - "i": "8", - "h": "8", - "g": "4", - "f": "4", - "e": "4", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "o": 16, + "n": 8, + "m": 8, + "l": 8, + "k": 8, + "j": 8, + "i": 8, + "h": 8, + "g": 4, + "f": 4, + "e": 4, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "68": { - "i": "16", - "h": "8", - "g": "8", - "f": "8", - "e": "8", - "d": "8", - "c": "8", - "b": "4", - "a": "4" + "i": 16, + "h": 8, + "g": 8, + "f": 8, + "e": 8, + "d": 8, + "c": 8, + "b": 4, + "a": 4 }, "69": { - "p": "32", - "o": "16", - "n": "16", - "m": "16", - "l": "16", - "k": "16", - "j": "16", - "i": "8", - "h": "8", - "g": "8", - "f": "8", - "e": "8", - "d": "8", - "c": "8", - "b": "4", - "a": "4" + "p": 32, + "o": 16, + "n": 16, + "m": 16, + "l": 16, + "k": 16, + "j": 16, + "i": 8, + "h": 8, + "g": 8, + "f": 8, + "e": 8, + "d": 8, + "c": 8, + "b": 4, + "a": 4 }, "70": { - "h": "32", - "g": "16", - "f": "16", - "e": "16", - "d": "16", - "c": "16", - "b": "8", - "a": "8" + "h": 32, + "g": 16, + "f": 16, + "e": 16, + "d": 16, + "c": 16, + "b": 8, + "a": 8 }, "71": { - "o": "16", - "n": "8", - "m": "8", - "l": "8", - "k": "8", - "j": "4", - "i": "4", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "o": 16, + "n": 8, + "m": 8, + "l": 8, + "k": 8, + "j": 4, + "i": 4, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "72": { - "k": "16", - "j": "8", - "i": "8", - "h": "8", - "g": "8", - "f": "8", - "e": "8", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "k": 16, + "j": 8, + "i": 8, + "h": 8, + "g": 8, + "f": 8, + "e": 8, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "73": { - "f": "16", - "e": "8", - "d": "8", - "c": "8", - "b": "8", - "a": "8" + "f": 16, + "e": 8, + "d": 8, + "c": 8, + "b": 8, + "a": 8 }, "74": { - "j": "16", - "i": "8", - "h": "8", - "g": "8", - "f": "8", - "e": "4", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "j": 16, + "i": 8, + "h": 8, + "g": 8, + "f": 8, + "e": 4, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "75": { - "d": "4", - "c": "2", - "b": "1", - "a": "1" + "d": 4, + "c": 2, + "b": 1, + "a": 1 }, "76": { - "a": "4" + "a": 4 }, "77": { - "d": "4", - "c": "2", - "b": "2", - "a": "2" + "d": 4, + "c": 2, + "b": 2, + "a": 2 }, "78": { - "a": "4" + "a": 4 }, "79": { - "c": "8", - "b": "4", - "a": "2" + "c": 8, + "b": 4, + "a": 2 }, "80": { - "b": "8", - "a": "4" + "b": 8, + "a": 4 }, "81": { - "h": "4", - "g": "2", - "f": "2", - "e": "2", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "h": 4, + "g": 2, + "f": 2, + "e": 2, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "82": { - "g": "8", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "g": 8, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "83": { - "l": "8", - "k": "4", - "j": "4", - "i": "4", - "h": "2", - "g": "2", - "f": "2", - "e": "2", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "l": 8, + "k": 4, + "j": 4, + "i": 4, + "h": 2, + "g": 2, + "f": 2, + "e": 2, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "84": { - "k": "8", - "j": "4", - "i": "4", - "h": "4", - "g": "4", - "f": "2", - "e": "2", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "k": 8, + "j": 4, + "i": 4, + "h": 4, + "g": 4, + "f": 2, + "e": 2, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "85": { - "g": "8", - "f": "4", - "e": "4", - "d": "4", - "c": "2", - "b": "2", - "a": "2" + "g": 8, + "f": 4, + "e": 4, + "d": 4, + "c": 2, + "b": 2, + "a": 2 }, "86": { - "g": "8", - "f": "4", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "g": 8, + "f": 4, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "87": { - "i": "16", - "h": "8", - "g": "8", - "f": "8", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "i": 16, + "h": 8, + "g": 8, + "f": 8, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "88": { - "f": "16", - "e": "8", - "d": "8", - "c": "8", - "b": "4", - "a": "4" + "f": 16, + "e": 8, + "d": 8, + "c": 8, + "b": 4, + "a": 4 }, "89": { - "p": "8", - "o": "4", - "n": "4", - "m": "4", - "l": "4", - "k": "4", - "j": "4", - "i": "4", - "h": "2", - "g": "2", - "f": "2", - "e": "2", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "p": 8, + "o": 4, + "n": 4, + "m": 4, + "l": 4, + "k": 4, + "j": 4, + "i": 4, + "h": 2, + "g": 2, + "f": 2, + "e": 2, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "90": { - "g": "8", - "f": "4", - "e": "4", - "d": "4", - "c": "2", - "b": "2", - "a": "2" + "g": 8, + "f": 4, + "e": 4, + "d": 4, + "c": 2, + "b": 2, + "a": 2 }, "91": { - "d": "8", - "c": "4", - "b": "4", - "a": "4" + "d": 8, + "c": 4, + "b": 4, + "a": 4 }, "92": { - "b": "8", - "a": "4" + "b": 8, + "a": 4 }, "93": { - "p": "8", - "o": "4", - "n": "4", - "m": "4", - "l": "4", - "k": "4", - "j": "4", - "i": "4", - "h": "4", - "g": "4", - "f": "2", - "e": "2", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "p": 8, + "o": 4, + "n": 4, + "m": 4, + "l": 4, + "k": 4, + "j": 4, + "i": 4, + "h": 4, + "g": 4, + "f": 2, + "e": 2, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "94": { - "g": "8", - "f": "4", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "g": 8, + "f": 4, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "95": { - "d": "8", - "c": "4", - "b": "4", - "a": "4" + "d": 8, + "c": 4, + "b": 4, + "a": 4 }, "96": { - "b": "8", - "a": "4" + "b": 8, + "a": 4 }, "97": { - "k": "16", - "j": "8", - "i": "8", - "h": "8", - "g": "8", - "f": "8", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "k": 16, + "j": 8, + "i": 8, + "h": 8, + "g": 8, + "f": 8, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "98": { - "g": "16", - "f": "8", - "e": "8", - "d": "8", - "c": "8", - "b": "4", - "a": "4" + "g": 16, + "f": 8, + "e": 8, + "d": 8, + "c": 8, + "b": 4, + "a": 4 }, "99": { - "g": "8", - "f": "4", - "e": "4", - "d": "4", - "c": "2", - "b": "1", - "a": "1" + "g": 8, + "f": 4, + "e": 4, + "d": 4, + "c": 2, + "b": 1, + "a": 1 }, "100": { - "d": "8", - "c": "4", - "b": "2", - "a": "2" + "d": 8, + "c": 4, + "b": 2, + "a": 2 }, "101": { - "e": "8", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "e": 8, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "102": { - "d": "8", - "c": "4", - "b": "4", - "a": "2" + "d": 8, + "c": 4, + "b": 4, + "a": 2 }, "103": { - "d": "8", - "c": "4", - "b": "2", - "a": "2" + "d": 8, + "c": 4, + "b": 2, + "a": 2 }, "104": { - "c": "8", - "b": "4", - "a": "2" + "c": 8, + "b": 4, + "a": 2 }, "105": { - "f": "8", - "e": "4", - "d": "4", - "c": "2", - "b": "2", - "a": "2" + "f": 8, + "e": 4, + "d": 4, + "c": 2, + "b": 2, + "a": 2 }, "106": { - "c": "8", - "b": "4", - "a": "4" + "c": 8, + "b": 4, + "a": 4 }, "107": { - "e": "16", - "d": "8", - "c": "8", - "b": "4", - "a": "2" + "e": 16, + "d": 8, + "c": 8, + "b": 4, + "a": 2 }, "108": { - "d": "16", - "c": "8", - "b": "4", - "a": "4" + "d": 16, + "c": 8, + "b": 4, + "a": 4 }, "109": { - "c": "16", - "b": "8", - "a": "4" + "c": 16, + "b": 8, + "a": 4 }, "110": { - "b": "16", - "a": "8" + "b": 16, + "a": 8 }, "111": { - "o": "8", - "n": "4", - "m": "4", - "l": "4", - "k": "4", - "j": "4", - "i": "4", - "h": "2", - "g": "2", - "f": "2", - "e": "2", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "o": 8, + "n": 4, + "m": 4, + "l": 4, + "k": 4, + "j": 4, + "i": 4, + "h": 2, + "g": 2, + "f": 2, + "e": 2, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "112": { - "n": "8", - "m": "4", - "l": "4", - "k": "4", - "j": "4", - "i": "4", - "h": "4", - "g": "4", - "f": "2", - "e": "2", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "n": 8, + "m": 4, + "l": 4, + "k": 4, + "j": 4, + "i": 4, + "h": 4, + "g": 4, + "f": 2, + "e": 2, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "113": { - "f": "8", - "e": "4", - "d": "4", - "c": "2", - "b": "2", - "a": "2" + "f": 8, + "e": 4, + "d": 4, + "c": 2, + "b": 2, + "a": 2 }, "114": { - "e": "8", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "e": 8, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "115": { - "l": "8", - "k": "4", - "j": "4", - "i": "4", - "h": "4", - "g": "2", - "f": "2", - "e": "2", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "l": 8, + "k": 4, + "j": 4, + "i": 4, + "h": 4, + "g": 2, + "f": 2, + "e": 2, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "116": { - "j": "8", - "i": "4", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "j": 8, + "i": 4, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "117": { - "i": "8", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "i": 8, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "118": { - "i": "8", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "i": 8, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "119": { - "j": "16", - "i": "8", - "h": "8", - "g": "8", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "j": 16, + "i": 8, + "h": 8, + "g": 8, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "120": { - "i": "16", - "h": "8", - "g": "8", - "f": "8", - "e": "8", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "i": 16, + "h": 8, + "g": 8, + "f": 8, + "e": 8, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "121": { - "j": "16", - "i": "8", - "h": "8", - "g": "8", - "f": "8", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "j": 16, + "i": 8, + "h": 8, + "g": 8, + "f": 8, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "122": { - "e": "16", - "d": "8", - "c": "8", - "b": "4", - "a": "4" + "e": 16, + "d": 8, + "c": 8, + "b": 4, + "a": 4 }, "123": { - "u": "16", - "t": "8", - "s": "8", - "r": "8", - "q": "8", - "p": "8", - "o": "4", - "n": "4", - "m": "4", - "l": "4", - "k": "4", - "j": "4", - "i": "4", - "h": "2", - "g": "2", - "f": "2", - "e": "2", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "u": 16, + "t": 8, + "s": 8, + "r": 8, + "q": 8, + "p": 8, + "o": 4, + "n": 4, + "m": 4, + "l": 4, + "k": 4, + "j": 4, + "i": 4, + "h": 2, + "g": 2, + "f": 2, + "e": 2, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "124": { - "n": "16", - "m": "8", - "l": "8", - "k": "8", - "j": "8", - "i": "8", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "n": 16, + "m": 8, + "l": 8, + "k": 8, + "j": 8, + "i": 8, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "125": { - "n": "16", - "m": "8", - "l": "8", - "k": "8", - "j": "8", - "i": "8", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "n": 16, + "m": 8, + "l": 8, + "k": 8, + "j": 8, + "i": 8, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "126": { - "k": "16", - "j": "8", - "i": "8", - "h": "8", - "g": "8", - "f": "8", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "k": 16, + "j": 8, + "i": 8, + "h": 8, + "g": 8, + "f": 8, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "127": { - "l": "16", - "k": "8", - "j": "8", - "i": "8", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "l": 16, + "k": 8, + "j": 8, + "i": 8, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "128": { - "i": "16", - "h": "8", - "g": "8", - "f": "8", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "i": 16, + "h": 8, + "g": 8, + "f": 8, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "129": { - "k": "16", - "j": "8", - "i": "8", - "h": "8", - "g": "8", - "f": "4", - "e": "4", - "d": "4", - "c": "2", - "b": "2", - "a": "2" + "k": 16, + "j": 8, + "i": 8, + "h": 8, + "g": 8, + "f": 4, + "e": 4, + "d": 4, + "c": 2, + "b": 2, + "a": 2 }, "130": { - "g": "16", - "f": "8", - "e": "8", - "d": "8", - "c": "4", - "b": "4", - "a": "4" + "g": 16, + "f": 8, + "e": 8, + "d": 8, + "c": 4, + "b": 4, + "a": 4 }, "131": { - "r": "16", - "q": "8", - "p": "8", - "o": "8", - "n": "8", - "m": "4", - "l": "4", - "k": "4", - "j": "4", - "i": "4", - "h": "4", - "g": "4", - "f": "2", - "e": "2", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "r": 16, + "q": 8, + "p": 8, + "o": 8, + "n": 8, + "m": 4, + "l": 4, + "k": 4, + "j": 4, + "i": 4, + "h": 4, + "g": 4, + "f": 2, + "e": 2, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "132": { - "p": "16", - "o": "8", - "n": "8", - "m": "8", - "l": "8", - "k": "8", - "j": "4", - "i": "4", - "h": "4", - "g": "4", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "p": 16, + "o": 8, + "n": 8, + "m": 8, + "l": 8, + "k": 8, + "j": 4, + "i": 4, + "h": 4, + "g": 4, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "133": { - "k": "16", - "j": "8", - "i": "8", - "h": "8", - "g": "8", - "f": "8", - "e": "8", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "k": 16, + "j": 8, + "i": 8, + "h": 8, + "g": 8, + "f": 8, + "e": 8, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "134": { - "n": "16", - "m": "8", - "l": "8", - "k": "8", - "j": "8", - "i": "8", - "h": "8", - "g": "4", - "f": "4", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "n": 16, + "m": 8, + "l": 8, + "k": 8, + "j": 8, + "i": 8, + "h": 8, + "g": 4, + "f": 4, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "135": { - "i": "16", - "h": "8", - "g": "8", - "f": "8", - "e": "8", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "i": 16, + "h": 8, + "g": 8, + "f": 8, + "e": 8, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "136": { - "k": "16", - "j": "8", - "i": "8", - "h": "8", - "g": "4", - "f": "4", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "k": 16, + "j": 8, + "i": 8, + "h": 8, + "g": 4, + "f": 4, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "137": { - "h": "16", - "g": "8", - "f": "8", - "e": "8", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "h": 16, + "g": 8, + "f": 8, + "e": 8, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "138": { - "j": "16", - "i": "8", - "h": "8", - "g": "8", - "f": "8", - "e": "4", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "j": 16, + "i": 8, + "h": 8, + "g": 8, + "f": 8, + "e": 4, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "139": { - "o": "32", - "n": "16", - "m": "16", - "l": "16", - "k": "16", - "j": "8", - "i": "8", - "h": "8", - "g": "8", - "f": "8", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "o": 32, + "n": 16, + "m": 16, + "l": 16, + "k": 16, + "j": 8, + "i": 8, + "h": 8, + "g": 8, + "f": 8, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "140": { - "m": "32", - "l": "16", - "k": "16", - "j": "16", - "i": "16", - "h": "8", - "g": "8", - "f": "8", - "e": "8", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "m": 32, + "l": 16, + "k": 16, + "j": 16, + "i": 16, + "h": 8, + "g": 8, + "f": 8, + "e": 8, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "141": { - "i": "32", - "h": "16", - "g": "16", - "f": "16", - "e": "8", - "d": "8", - "c": "8", - "b": "4", - "a": "4" + "i": 32, + "h": 16, + "g": 16, + "f": 16, + "e": 8, + "d": 8, + "c": 8, + "b": 4, + "a": 4 }, "142": { - "g": "32", - "f": "16", - "e": "16", - "d": "16", - "c": "16", - "b": "8", - "a": "8" + "g": 32, + "f": 16, + "e": 16, + "d": 16, + "c": 16, + "b": 8, + "a": 8 }, "143": { - "d": "3", - "c": "1", - "b": "1", - "a": "1" + "d": 3, + "c": 1, + "b": 1, + "a": 1 }, "144": { - "a": "3" + "a": 3 }, "145": { - "a": "3" + "a": 3 }, "146": { - "b": "9", - "a": "3" + "b": 9, + "a": 3 }, "147": { - "g": "6", - "f": "3", - "e": "3", - "d": "2", - "c": "2", - "b": "1", - "a": "1" + "g": 6, + "f": 3, + "e": 3, + "d": 2, + "c": 2, + "b": 1, + "a": 1 }, "148": { - "f": "18", - "e": "9", - "d": "9", - "c": "6", - "b": "3", - "a": "3" + "f": 18, + "e": 9, + "d": 9, + "c": 6, + "b": 3, + "a": 3 }, "149": { - "l": "6", - "k": "3", - "j": "3", - "i": "2", - "h": "2", - "g": "2", - "f": "1", - "e": "1", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "l": 6, + "k": 3, + "j": 3, + "i": 2, + "h": 2, + "g": 2, + "f": 1, + "e": 1, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "150": { - "g": "6", - "f": "3", - "e": "3", - "d": "2", - "c": "2", - "b": "1", - "a": "1" + "g": 6, + "f": 3, + "e": 3, + "d": 2, + "c": 2, + "b": 1, + "a": 1 }, "151": { - "c": "6", - "b": "3", - "a": "3" + "c": 6, + "b": 3, + "a": 3 }, "152": { - "c": "6", - "b": "3", - "a": "3" + "c": 6, + "b": 3, + "a": 3 }, "153": { - "c": "6", - "b": "3", - "a": "3" + "c": 6, + "b": 3, + "a": 3 }, "154": { - "c": "6", - "b": "3", - "a": "3" + "c": 6, + "b": 3, + "a": 3 }, "155": { - "f": "18", - "e": "9", - "d": "9", - "c": "6", - "b": "3", - "a": "3" + "f": 18, + "e": 9, + "d": 9, + "c": 6, + "b": 3, + "a": 3 }, "156": { - "e": "6", - "d": "3", - "c": "1", - "b": "1", - "a": "1" + "e": 6, + "d": 3, + "c": 1, + "b": 1, + "a": 1 }, "157": { - "d": "6", - "c": "3", - "b": "2", - "a": "1" + "d": 6, + "c": 3, + "b": 2, + "a": 1 }, "158": { - "d": "6", - "c": "2", - "b": "2", - "a": "2" + "d": 6, + "c": 2, + "b": 2, + "a": 2 }, "159": { - "c": "6", - "b": "2", - "a": "2" + "c": 6, + "b": 2, + "a": 2 }, "160": { - "c": "18", - "b": "9", - "a": "3" + "c": 18, + "b": 9, + "a": 3 }, "161": { - "b": "18", - "a": "6" + "b": 18, + "a": 6 }, "162": { - "l": "12", - "k": "6", - "j": "6", - "i": "6", - "h": "4", - "g": "3", - "f": "3", - "e": "2", - "d": "2", - "c": "2", - "b": "1", - "a": "1" + "l": 12, + "k": 6, + "j": 6, + "i": 6, + "h": 4, + "g": 3, + "f": 3, + "e": 2, + "d": 2, + "c": 2, + "b": 1, + "a": 1 }, "163": { - "i": "12", - "h": "6", - "g": "6", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "i": 12, + "h": 6, + "g": 6, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "164": { - "j": "12", - "i": "6", - "h": "6", - "g": "6", - "f": "3", - "e": "3", - "d": "2", - "c": "2", - "b": "1", - "a": "1" + "j": 12, + "i": 6, + "h": 6, + "g": 6, + "f": 3, + "e": 3, + "d": 2, + "c": 2, + "b": 1, + "a": 1 }, "165": { - "g": "12", - "f": "6", - "e": "6", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "g": 12, + "f": 6, + "e": 6, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "166": { - "i": "36", - "h": "18", - "g": "18", - "f": "18", - "e": "9", - "d": "9", - "c": "6", - "b": "3", - "a": "3" + "i": 36, + "h": 18, + "g": 18, + "f": 18, + "e": 9, + "d": 9, + "c": 6, + "b": 3, + "a": 3 }, "167": { - "f": "36", - "e": "18", - "d": "18", - "c": "12", - "b": "6", - "a": "6" + "f": 36, + "e": 18, + "d": 18, + "c": 12, + "b": 6, + "a": 6 }, "168": { - "d": "6", - "c": "3", - "b": "2", - "a": "1" + "d": 6, + "c": 3, + "b": 2, + "a": 1 }, "169": { - "a": "6" + "a": 6 }, "170": { - "a": "6" + "a": 6 }, "171": { - "c": "6", - "b": "3", - "a": "3" + "c": 6, + "b": 3, + "a": 3 }, "172": { - "c": "6", - "b": "3", - "a": "3" + "c": 6, + "b": 3, + "a": 3 }, "173": { - "c": "6", - "b": "2", - "a": "2" + "c": 6, + "b": 2, + "a": 2 }, "174": { - "l": "6", - "k": "3", - "j": "3", - "i": "2", - "h": "2", - "g": "2", - "f": "1", - "e": "1", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "l": 6, + "k": 3, + "j": 3, + "i": 2, + "h": 2, + "g": 2, + "f": 1, + "e": 1, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "175": { - "l": "12", - "k": "6", - "j": "6", - "i": "6", - "h": "4", - "g": "3", - "f": "3", - "e": "2", - "d": "2", - "c": "2", - "b": "1", - "a": "1" + "l": 12, + "k": 6, + "j": 6, + "i": 6, + "h": 4, + "g": 3, + "f": 3, + "e": 2, + "d": 2, + "c": 2, + "b": 1, + "a": 1 }, "176": { - "i": "12", - "h": "6", - "g": "6", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "i": 12, + "h": 6, + "g": 6, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "177": { - "n": "12", - "m": "6", - "l": "6", - "k": "6", - "j": "6", - "i": "6", - "h": "4", - "g": "3", - "f": "3", - "e": "2", - "d": "2", - "c": "2", - "b": "1", - "a": "1" + "n": 12, + "m": 6, + "l": 6, + "k": 6, + "j": 6, + "i": 6, + "h": 4, + "g": 3, + "f": 3, + "e": 2, + "d": 2, + "c": 2, + "b": 1, + "a": 1 }, "178": { - "c": "12", - "b": "6", - "a": "6" + "c": 12, + "b": 6, + "a": 6 }, "179": { - "c": "12", - "b": "6", - "a": "6" + "c": 12, + "b": 6, + "a": 6 }, "180": { - "k": "12", - "j": "6", - "i": "6", - "h": "6", - "g": "6", - "f": "6", - "e": "6", - "d": "3", - "c": "3", - "b": "3", - "a": "3" + "k": 12, + "j": 6, + "i": 6, + "h": 6, + "g": 6, + "f": 6, + "e": 6, + "d": 3, + "c": 3, + "b": 3, + "a": 3 }, "181": { - "k": "12", - "j": "6", - "i": "6", - "h": "6", - "g": "6", - "f": "6", - "e": "6", - "d": "3", - "c": "3", - "b": "3", - "a": "3" + "k": 12, + "j": 6, + "i": 6, + "h": 6, + "g": 6, + "f": 6, + "e": 6, + "d": 3, + "c": 3, + "b": 3, + "a": 3 }, "182": { - "i": "12", - "h": "6", - "g": "6", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "i": 12, + "h": 6, + "g": 6, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "183": { - "f": "12", - "e": "6", - "d": "6", - "c": "3", - "b": "2", - "a": "1" + "f": 12, + "e": 6, + "d": 6, + "c": 3, + "b": 2, + "a": 1 }, "184": { - "d": "12", - "c": "6", - "b": "4", - "a": "2" + "d": 12, + "c": 6, + "b": 4, + "a": 2 }, "185": { - "d": "12", - "c": "6", - "b": "4", - "a": "2" + "d": 12, + "c": 6, + "b": 4, + "a": 2 }, "186": { - "d": "12", - "c": "6", - "b": "2", - "a": "2" + "d": 12, + "c": 6, + "b": 2, + "a": 2 }, "187": { - "o": "12", - "n": "6", - "m": "6", - "l": "6", - "k": "3", - "j": "3", - "i": "2", - "h": "2", - "g": "2", - "f": "1", - "e": "1", - "d": "1", - "c": "1", - "b": "1", - "a": "1" + "o": 12, + "n": 6, + "m": 6, + "l": 6, + "k": 3, + "j": 3, + "i": 2, + "h": 2, + "g": 2, + "f": 1, + "e": 1, + "d": 1, + "c": 1, + "b": 1, + "a": 1 }, "188": { - "l": "12", - "k": "6", - "j": "6", - "i": "4", - "h": "4", - "g": "4", - "f": "2", - "e": "2", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "l": 12, + "k": 6, + "j": 6, + "i": 4, + "h": 4, + "g": 4, + "f": 2, + "e": 2, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "189": { - "l": "12", - "k": "6", - "j": "6", - "i": "6", - "h": "4", - "g": "3", - "f": "3", - "e": "2", - "d": "2", - "c": "2", - "b": "1", - "a": "1" + "l": 12, + "k": 6, + "j": 6, + "i": 6, + "h": 4, + "g": 3, + "f": 3, + "e": 2, + "d": 2, + "c": 2, + "b": 1, + "a": 1 }, "190": { - "i": "12", - "h": "6", - "g": "6", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "i": 12, + "h": 6, + "g": 6, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "191": { - "r": "24", - "q": "12", - "p": "12", - "o": "12", - "n": "12", - "m": "6", - "l": "6", - "k": "6", - "j": "6", - "i": "6", - "h": "4", - "g": "3", - "f": "3", - "e": "2", - "d": "2", - "c": "2", - "b": "1", - "a": "1" + "r": 24, + "q": 12, + "p": 12, + "o": 12, + "n": 12, + "m": 6, + "l": 6, + "k": 6, + "j": 6, + "i": 6, + "h": 4, + "g": 3, + "f": 3, + "e": 2, + "d": 2, + "c": 2, + "b": 1, + "a": 1 }, "192": { - "m": "24", - "l": "12", - "k": "12", - "j": "12", - "i": "12", - "h": "8", - "g": "6", - "f": "6", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "m": 24, + "l": 12, + "k": 12, + "j": 12, + "i": 12, + "h": 8, + "g": 6, + "f": 6, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "193": { - "l": "24", - "k": "12", - "j": "12", - "i": "12", - "h": "8", - "g": "6", - "f": "6", - "e": "4", - "d": "4", - "c": "4", - "b": "2", - "a": "2" + "l": 24, + "k": 12, + "j": 12, + "i": 12, + "h": 8, + "g": 6, + "f": 6, + "e": 4, + "d": 4, + "c": 4, + "b": 2, + "a": 2 }, "194": { - "l": "24", - "k": "12", - "j": "12", - "i": "12", - "h": "6", - "g": "6", - "f": "4", - "e": "4", - "d": "2", - "c": "2", - "b": "2", - "a": "2" + "l": 24, + "k": 12, + "j": 12, + "i": 12, + "h": 6, + "g": 6, + "f": 4, + "e": 4, + "d": 2, + "c": 2, + "b": 2, + "a": 2 }, "195": { - "j": "12", - "i": "6", - "h": "6", - "g": "6", - "f": "6", - "e": "4", - "d": "3", - "c": "3", - "b": "1", - "a": "1" + "j": 12, + "i": 6, + "h": 6, + "g": 6, + "f": 6, + "e": 4, + "d": 3, + "c": 3, + "b": 1, + "a": 1 }, "196": { - "h": "48", - "g": "24", - "f": "24", - "e": "16", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "h": 48, + "g": 24, + "f": 24, + "e": 16, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "197": { - "f": "24", - "e": "12", - "d": "12", - "c": "8", - "b": "6", - "a": "2" + "f": 24, + "e": 12, + "d": 12, + "c": 8, + "b": 6, + "a": 2 }, "198": { - "b": "12", - "a": "4" + "b": 12, + "a": 4 }, "199": { - "c": "24", - "b": "12", - "a": "8" + "c": 24, + "b": 12, + "a": 8 }, "200": { - "l": "24", - "k": "12", - "j": "12", - "i": "8", - "h": "6", - "g": "6", - "f": "6", - "e": "6", - "d": "3", - "c": "3", - "b": "1", - "a": "1" + "l": 24, + "k": 12, + "j": 12, + "i": 8, + "h": 6, + "g": 6, + "f": 6, + "e": 6, + "d": 3, + "c": 3, + "b": 1, + "a": 1 }, "201": { - "h": "24", - "g": "12", - "f": "12", - "e": "8", - "d": "6", - "c": "4", - "b": "4", - "a": "2" + "h": 24, + "g": 12, + "f": 12, + "e": 8, + "d": 6, + "c": 4, + "b": 4, + "a": 2 }, "202": { - "i": "96", - "h": "48", - "g": "48", - "f": "32", - "e": "24", - "d": "24", - "c": "8", - "b": "4", - "a": "4" + "i": 96, + "h": 48, + "g": 48, + "f": 32, + "e": 24, + "d": 24, + "c": 8, + "b": 4, + "a": 4 }, "203": { - "g": "96", - "f": "48", - "e": "32", - "d": "16", - "c": "16", - "b": "8", - "a": "8" + "g": 96, + "f": 48, + "e": 32, + "d": 16, + "c": 16, + "b": 8, + "a": 8 }, "204": { - "h": "48", - "g": "24", - "f": "16", - "e": "12", - "d": "12", - "c": "8", - "b": "6", - "a": "2" + "h": 48, + "g": 24, + "f": 16, + "e": 12, + "d": 12, + "c": 8, + "b": 6, + "a": 2 }, "205": { - "d": "24", - "c": "8", - "b": "4", - "a": "4" + "d": 24, + "c": 8, + "b": 4, + "a": 4 }, "206": { - "e": "48", - "d": "24", - "c": "16", - "b": "8", - "a": "8" + "e": 48, + "d": 24, + "c": 16, + "b": 8, + "a": 8 }, "207": { - "k": "24", - "j": "12", - "i": "12", - "h": "12", - "g": "8", - "f": "6", - "e": "6", - "d": "3", - "c": "3", - "b": "1", - "a": "1" + "k": 24, + "j": 12, + "i": 12, + "h": 12, + "g": 8, + "f": 6, + "e": 6, + "d": 3, + "c": 3, + "b": 1, + "a": 1 }, "208": { - "m": "24", - "l": "12", - "k": "12", - "j": "12", - "i": "12", - "h": "12", - "g": "8", - "f": "6", - "e": "6", - "d": "6", - "c": "4", - "b": "4", - "a": "2" + "m": 24, + "l": 12, + "k": 12, + "j": 12, + "i": 12, + "h": 12, + "g": 8, + "f": 6, + "e": 6, + "d": 6, + "c": 4, + "b": 4, + "a": 2 }, "209": { - "j": "96", - "i": "48", - "h": "48", - "g": "48", - "f": "32", - "e": "24", - "d": "24", - "c": "8", - "b": "4", - "a": "4" + "j": 96, + "i": 48, + "h": 48, + "g": 48, + "f": 32, + "e": 24, + "d": 24, + "c": 8, + "b": 4, + "a": 4 }, "210": { - "h": "96", - "g": "48", - "f": "48", - "e": "32", - "d": "16", - "c": "16", - "b": "8", - "a": "8" + "h": 96, + "g": 48, + "f": 48, + "e": 32, + "d": 16, + "c": 16, + "b": 8, + "a": 8 }, "211": { - "j": "48", - "i": "24", - "h": "24", - "g": "24", - "f": "16", - "e": "12", - "d": "12", - "c": "8", - "b": "6", - "a": "2" + "j": 48, + "i": 24, + "h": 24, + "g": 24, + "f": 16, + "e": 12, + "d": 12, + "c": 8, + "b": 6, + "a": 2 }, "212": { - "e": "24", - "d": "12", - "c": "8", - "b": "4", - "a": "4" + "e": 24, + "d": 12, + "c": 8, + "b": 4, + "a": 4 }, "213": { - "e": "24", - "d": "12", - "c": "8", - "b": "4", - "a": "4" + "e": 24, + "d": 12, + "c": 8, + "b": 4, + "a": 4 }, "214": { - "i": "48", - "h": "24", - "g": "24", - "f": "24", - "e": "16", - "d": "12", - "c": "12", - "b": "8", - "a": "8" + "i": 48, + "h": 24, + "g": 24, + "f": 24, + "e": 16, + "d": 12, + "c": 12, + "b": 8, + "a": 8 }, "215": { - "j": "24", - "i": "12", - "h": "12", - "g": "6", - "f": "6", - "e": "4", - "d": "3", - "c": "3", - "b": "1", - "a": "1" + "j": 24, + "i": 12, + "h": 12, + "g": 6, + "f": 6, + "e": 4, + "d": 3, + "c": 3, + "b": 1, + "a": 1 }, "216": { - "i": "96", - "h": "48", - "g": "24", - "f": "24", - "e": "16", - "d": "4", - "c": "4", - "b": "4", - "a": "4" + "i": 96, + "h": 48, + "g": 24, + "f": 24, + "e": 16, + "d": 4, + "c": 4, + "b": 4, + "a": 4 }, "217": { - "h": "48", - "g": "24", - "f": "24", - "e": "12", - "d": "12", - "c": "8", - "b": "6", - "a": "2" + "h": 48, + "g": 24, + "f": 24, + "e": 12, + "d": 12, + "c": 8, + "b": 6, + "a": 2 }, "218": { - "i": "24", - "h": "12", - "g": "12", - "f": "12", - "e": "8", - "d": "6", - "c": "6", - "b": "6", - "a": "2" + "i": 24, + "h": 12, + "g": 12, + "f": 12, + "e": 8, + "d": 6, + "c": 6, + "b": 6, + "a": 2 }, "219": { - "h": "96", - "g": "48", - "f": "48", - "e": "32", - "d": "24", - "c": "24", - "b": "8", - "a": "8" + "h": 96, + "g": 48, + "f": 48, + "e": 32, + "d": 24, + "c": 24, + "b": 8, + "a": 8 }, "220": { - "e": "48", - "d": "24", - "c": "16", - "b": "12", - "a": "12" + "e": 48, + "d": 24, + "c": 16, + "b": 12, + "a": 12 }, "221": { - "n": "48", - "m": "24", - "l": "24", - "k": "24", - "j": "12", - "i": "12", - "h": "12", - "g": "8", - "f": "6", - "e": "6", - "d": "3", - "c": "3", - "b": "1", - "a": "1" + "n": 48, + "m": 24, + "l": 24, + "k": 24, + "j": 12, + "i": 12, + "h": 12, + "g": 8, + "f": 6, + "e": 6, + "d": 3, + "c": 3, + "b": 1, + "a": 1 }, "222": { - "i": "48", - "h": "24", - "g": "24", - "f": "16", - "e": "12", - "d": "12", - "c": "8", - "b": "6", - "a": "2" + "i": 48, + "h": 24, + "g": 24, + "f": 16, + "e": 12, + "d": 12, + "c": 8, + "b": 6, + "a": 2 }, "223": { - "l": "48", - "k": "24", - "j": "24", - "i": "16", - "h": "12", - "g": "12", - "f": "12", - "e": "8", - "d": "6", - "c": "6", - "b": "6", - "a": "2" + "l": 48, + "k": 24, + "j": 24, + "i": 16, + "h": 12, + "g": 12, + "f": 12, + "e": 8, + "d": 6, + "c": 6, + "b": 6, + "a": 2 }, "224": { - "l": "48", - "k": "24", - "j": "24", - "i": "24", - "h": "24", - "g": "12", - "f": "12", - "e": "8", - "d": "6", - "c": "4", - "b": "4", - "a": "2" + "l": 48, + "k": 24, + "j": 24, + "i": 24, + "h": 24, + "g": 12, + "f": 12, + "e": 8, + "d": 6, + "c": 4, + "b": 4, + "a": 2 }, "225": { - "l": "192", - "k": "96", - "j": "96", - "i": "48", - "h": "48", - "g": "48", - "f": "32", - "e": "24", - "d": "24", - "c": "8", - "b": "4", - "a": "4" + "l": 192, + "k": 96, + "j": 96, + "i": 48, + "h": 48, + "g": 48, + "f": 32, + "e": 24, + "d": 24, + "c": 8, + "b": 4, + "a": 4 }, "226": { - "j": "192", - "i": "96", - "h": "96", - "g": "64", - "f": "48", - "e": "48", - "d": "24", - "c": "24", - "b": "8", - "a": "8" + "j": 192, + "i": 96, + "h": 96, + "g": 64, + "f": 48, + "e": 48, + "d": 24, + "c": 24, + "b": 8, + "a": 8 }, "227": { - "i": "192", - "h": "96", - "g": "96", - "f": "48", - "e": "32", - "d": "16", - "c": "16", - "b": "8", - "a": "8" + "i": 192, + "h": 96, + "g": 96, + "f": 48, + "e": 32, + "d": 16, + "c": 16, + "b": 8, + "a": 8 }, "228": { - "h": "192", - "g": "96", - "f": "96", - "e": "64", - "d": "48", - "c": "32", - "b": "32", - "a": "16" + "h": 192, + "g": 96, + "f": 96, + "e": 64, + "d": 48, + "c": 32, + "b": 32, + "a": 16 }, "229": { - "l": "96", - "k": "48", - "j": "48", - "i": "48", - "h": "24", - "g": "24", - "f": "16", - "e": "12", - "d": "12", - "c": "8", - "b": "6", - "a": "2" + "l": 96, + "k": 48, + "j": 48, + "i": 48, + "h": 24, + "g": 24, + "f": 16, + "e": 12, + "d": 12, + "c": 8, + "b": 6, + "a": 2 }, "230": { - "h": "96", - "g": "48", - "f": "48", - "e": "32", - "d": "24", - "c": "24", - "b": "16", - "a": "16" + "h": 96, + "g": 48, + "f": 48, + "e": 32, + "d": 24, + "c": 24, + "b": 16, + "a": 16 } } diff --git a/tests/test_wyckoff_ops.py b/tests/test_wyckoff_ops.py index f8a1773e..b79052e2 100644 --- a/tests/test_wyckoff_ops.py +++ b/tests/test_wyckoff_ops.py @@ -7,6 +7,7 @@ from aviary.wren.utils import ( _find_translations, count_crystal_dof, + count_crystal_sites, count_distinct_wyckoff_letters, count_wyckoff_positions, get_aflow_label_from_aflow, @@ -46,20 +47,31 @@ def test_get_aflow_label_from_spglib(): @pytest.mark.parametrize( - "aflow_label, count", + "aflow_label, expected", [ ("ABC6D2_mC40_15_e_e_3f_f:Ca-Fe-O-Si", 6), # esseneite ("A6B11CD7_aP50_2_6i_ac10i_i_7i:C-H-N-O", 26), ("foo_bar_47_abc_A_b:X-Y-Z", 5), ], ) -def test_count_wyckoff_positions(aflow_label, count): - assert count_wyckoff_positions(aflow_label) == count +def test_count_wyckoff_positions(aflow_label, expected): + count = count_wyckoff_positions(aflow_label) + assert isinstance(count, int) + assert count == expected def test_count_crystal_dof(): """Count the number of coarse-grained parameters in esseneite""" - assert count_crystal_dof("ABC6D2_mC40_15_e_e_3f_f:Ca-Fe-O-Si") == 18 + count = count_crystal_dof("ABC6D2_mC40_15_e_e_3f_f:Ca-Fe-O-Si") + assert isinstance(count, int) + assert count == 18 + + +def test_count_crystal_sites(): + """Count the number of sites in esseneite""" + count = count_crystal_sites("ABC6D2_mC40_15_e_e_3f_f:Ca-Fe-O-Si") + assert isinstance(count, int) + assert count == 40 @pytest.mark.parametrize(