diff --git a/.gitignore b/.gitignore index fa380622..657feb24 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,6 @@ examples/**/job-logs/ examples/**/artifacts/ examples/**/*.csv wandb/ + +# profiling +*.prof diff --git a/README.md b/README.md index 52e5db97..0106cf72 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![GitHub last commit](https://img.shields.io/github/last-commit/comprhys/aviary?label=Last+Commit)](https://github.com/comprhys/aviary/commits) [![Tests](https://github.com/CompRhys/aviary/actions/workflows/test.yml/badge.svg)](https://github.com/CompRhys/aviary/actions/workflows/test.yml) [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/CompRhys/aviary/main.svg)](https://results.pre-commit.ci/latest/github/CompRhys/aviary/main) -[![This project supports Python 3.9+](https://img.shields.io/badge/Python-3.9+-blue.svg?logo=python&logoColor=white)](https://python.org/downloads) +[![This project supports Python 3.10+](https://img.shields.io/badge/Python-3.10+-blue.svg?logo=python&logoColor=white)](https://python.org/downloads) @@ -50,6 +50,10 @@ python examples/roost-example.py --train --evaluate --data-path examples/inputs/ python examples/wren-example.py --train --evaluate --data-path examples/inputs/examples.csv --targets E_f --tasks regression --losses L1 --robust --epoch 10 ``` +```sh +python examples/wrenformer-example.py --train --evaluate --data-path examples/inputs/examples.csv --targets E_f --tasks regression --losses L1 --robust --epoch 10 +``` + ```sh python examples/cgcnn-example.py --train --evaluate --data-path examples/inputs/examples.json --targets E_f --tasks regression --losses L1 --robust --epoch 10 ``` diff --git a/aviary/cgcnn/data.py b/aviary/cgcnn/data.py index 993a1f12..d426e260 100644 --- a/aviary/cgcnn/data.py +++ b/aviary/cgcnn/data.py @@ -1,24 +1,19 @@ -from __future__ import annotations - import itertools import json +from collections.abc import Sequence from functools import cache -from typing import TYPE_CHECKING, Any +from typing import Any import numpy as np +import pandas as pd import torch +from pymatgen.core import Structure from torch import LongTensor, Tensor from torch.utils.data import Dataset from tqdm import tqdm from aviary import PKG_DIR -if TYPE_CHECKING: - from collections.abc import Sequence - - import pandas as pd - from pymatgen.core import Structure - class CrystalGraphData(Dataset): """Dataset class for the CGCNN structure model.""" @@ -253,9 +248,10 @@ def collate_batch( return ( (atom_fea, nbr_dist, self_idx, nbr_idx, cry_idx), tuple( - torch.stack(b_target, dim=0).to(device) for b_target in zip(*batch_targets) + torch.stack(b_target, dim=0).to(device) + for b_target in zip(*batch_targets, strict=False) ), - *zip(*batch_identifiers), + *zip(*batch_identifiers, strict=False), ) @@ -332,10 +328,12 @@ def get_structure_neighbor_info( _neighbor_dists: list[float] = [] for _, idx_group in itertools.groupby( # group by site index - zip(site_indices, neighbor_indices, neighbor_dists), key=lambda x: x[0] + zip(site_indices, neighbor_indices, neighbor_dists, strict=False), + key=lambda x: x[0], ): site_indices, neighbor_idx, neighbor_dist = zip( - *sorted(idx_group, key=lambda x: x[2]) # sort by distance + *sorted(idx_group, key=lambda x: x[2]), + strict=False, # sort by distance ) _center_indices.extend(site_indices[:max_num_nbr]) _neighbor_indices.extend(neighbor_idx[:max_num_nbr]) diff --git a/aviary/cgcnn/model.py b/aviary/cgcnn/model.py index 196cabe8..e96389cb 100644 --- a/aviary/cgcnn/model.py +++ b/aviary/cgcnn/model.py @@ -1,6 +1,4 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING +from collections.abc import Sequence import torch import torch.nn.functional as F @@ -11,9 +9,6 @@ from aviary.networks import SimpleNetwork from aviary.scatter import scatter_reduce -if TYPE_CHECKING: - from collections.abc import Sequence - @due.dcite(Doi("10.1103/PhysRevLett.120.145301"), description="CGCNN model") class CrystalGraphConvNet(BaseModelClass): @@ -215,7 +210,7 @@ def forward( Args: atom_in_fea (Tensor): Atom hidden features before convolution nbr_fea (Tensor): Bond features of each atom's neighbors - self_idx (LongTensor): _description_ + self_idx (LongTensor): Indices of the atom's self nbr_idx (LongTensor): Indices of M neighbors of each atom Returns: diff --git a/aviary/core.py b/aviary/core.py index 7425c98c..983d41a9 100644 --- a/aviary/core.py +++ b/aviary/core.py @@ -1,11 +1,10 @@ -from __future__ import annotations - import gc import os import shutil from abc import ABC from collections import defaultdict -from typing import TYPE_CHECKING, Any, Callable, Literal +from collections.abc import Callable, Mapping +from typing import Any, Literal import numpy as np import torch @@ -13,17 +12,12 @@ from sklearn.metrics import f1_score from torch import BoolTensor, Tensor, nn from torch.nn.functional import softmax +from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter from tqdm import tqdm from aviary import ROOT - -if TYPE_CHECKING: - from collections.abc import Mapping - - from torch.utils.data import DataLoader - - from aviary.data import InMemoryDataLoader +from aviary.data import InMemoryDataLoader, Normalizer TaskType = Literal["regression", "classification"] @@ -129,6 +123,14 @@ def fit( for metric, val in metrics.items(): writer.add_scalar(f"{task}/train/{metric}", val, epoch) + if writer == "wandb": + flat_train_metrics = {} + for task, metrics in train_metrics.items(): + for metric, val in metrics.items(): + flat_train_metrics[f"train_{task}_{metric.lower()}"] = val + flat_train_metrics["epoch"] = epoch + wandb.log(flat_train_metrics) + # Validation if val_loader is not None: with torch.no_grad(): @@ -149,6 +151,14 @@ def fit( f"{task}/validation/{metric}", val, epoch ) + if writer == "wandb": + flat_val_metrics = {} + for task, metrics in val_metrics.items(): + for metric, val in metrics.items(): + flat_val_metrics[f"val_{task}_{metric.lower()}"] = val + flat_val_metrics["epoch"] = epoch + wandb.log(flat_val_metrics) + # TODO test all tasks to see if they are best, # save a best model if any is best. # TODO what are the costs of this approach. @@ -207,9 +217,6 @@ def fit( # catch memory leak gc.collect() - if writer == "wandb": - wandb.log({"train": train_metrics, "validation": val_metrics}) - except KeyboardInterrupt: pass @@ -271,7 +278,11 @@ def evaluate( mixed_loss: Tensor = 0 # type: ignore[assignment] for target_name, targets, output, normalizer in zip( - self.target_names, targets_list, outputs, normalizer_dict.values() + self.target_names, + targets_list, + outputs, + normalizer_dict.values(), + strict=False, ): task, loss_func = loss_dict[target_name] target_metrics = epoch_metrics[target_name] @@ -318,7 +329,7 @@ def evaluate( else: raise ValueError(f"invalid task: {task}") - epoch_metrics[target_name]["Loss"].append(loss.cpu().item()) + target_metrics["Loss"].append(loss.cpu().item()) # NOTE multitasking currently just uses a direct sum of individual # target losses this should be okay but is perhaps sub-optimal @@ -396,11 +407,13 @@ def predict( # for multitask learning targets = tuple( torch.cat(targets, dim=0).view(-1).cpu().numpy() - for targets in zip(*test_targets) + for targets in zip(*test_targets, strict=False) + ) + predictions = tuple( + torch.cat(preds, dim=0) for preds in zip(*test_preds, strict=False) ) - predictions = tuple(torch.cat(preds, dim=0) for preds in zip(*test_preds)) # identifier columns - ids = tuple(np.concatenate(x) for x in zip(*test_ids)) + ids = tuple(np.concatenate(x) for x in zip(*test_ids, strict=False)) return targets, predictions, ids @torch.no_grad() @@ -445,83 +458,6 @@ def __repr__(self) -> str: return f"{cls_name} with {n_params:,} trainable params at {n_epochs:,} epochs" -class Normalizer: - """Normalize a Tensor and restore it later.""" - - def __init__(self) -> None: - """Initialize Normalizer with mean 0 and std 1.""" - self.mean = torch.tensor(0) - self.std = torch.tensor(1) - - def fit(self, tensor: Tensor, dim: int = 0, keepdim: bool = False) -> None: - """Compute the mean and standard deviation of the given tensor. - - Args: - tensor (Tensor): Tensor to determine the mean and standard deviation over. - dim (int, optional): Which dimension to take mean and standard deviation - over. Defaults to 0. - keepdim (bool, optional): Whether to keep the reduced dimension in Tensor. - Defaults to False. - """ - self.mean = torch.mean(tensor, dim, keepdim) - self.std = torch.std(tensor, dim, keepdim) - - def norm(self, tensor: Tensor) -> Tensor: - """Normalize a Tensor. - - Args: - tensor (Tensor): Tensor to be normalized - - Returns: - Tensor: Normalized Tensor - """ - return (tensor - self.mean) / self.std - - def denorm(self, normed_tensor: Tensor) -> Tensor: - """Restore normalized Tensor to original. - - Args: - normed_tensor (Tensor): Tensor to be restored - - Returns: - Tensor: Restored Tensor - """ - return normed_tensor * self.std + self.mean - - def state_dict(self) -> dict[str, Tensor]: - """Get Normalizer parameters mean and std. - - Returns: - dict[str, Tensor]: Dictionary storing Normalizer parameters. - """ - return {"mean": self.mean, "std": self.std} - - def load_state_dict(self, state_dict: dict[str, Tensor]) -> None: - """Overwrite Normalizer parameters given a new state_dict. - - Args: - state_dict (dict[str, Tensor]): Dictionary storing Normalizer parameters. - """ - self.mean = state_dict["mean"].cpu() - self.std = state_dict["std"].cpu() - - @classmethod - def from_state_dict(cls, state_dict: dict[str, Tensor]) -> Normalizer: - """Create a new Normalizer given a state_dict. - - Args: - state_dict (dict[str, Tensor]): Dictionary storing Normalizer parameters. - - Returns: - Normalizer - """ - instance = cls() - instance.mean = state_dict["mean"].cpu() - instance.std = state_dict["std"].cpu() - - return instance - - def save_checkpoint( state: dict[str, Any], is_best: bool, model_name: str, run_id: int ) -> None: @@ -662,3 +598,12 @@ def masked_min(x: Tensor, mask: BoolTensor, dim: int = 0) -> Tensor: x_inf = x.float().masked_fill(~mask, float("inf")) x_min, _ = x_inf.min(dim=dim) return x_min + + +AGGREGATORS: dict[str, Callable[[Tensor, BoolTensor, int], Tensor]] = { + "mean": masked_mean, + "std": masked_std, + "max": masked_max, + "min": masked_min, + "sum": lambda x, mask, dim: (x * mask).sum(dim=dim), +} diff --git a/aviary/data.py b/aviary/data.py index e7c16035..fe077d33 100644 --- a/aviary/data.py +++ b/aviary/data.py @@ -1,14 +1,87 @@ -from __future__ import annotations - +from collections.abc import Callable, Iterator from dataclasses import dataclass -from typing import TYPE_CHECKING, Callable import numpy as np - -if TYPE_CHECKING: - from collections.abc import Iterator - - from torch import Tensor +import torch +from torch import Tensor +from typing_extensions import Self + + +class Normalizer: + """Normalize a Tensor and restore it later.""" + + def __init__(self) -> None: + """Initialize Normalizer with mean 0 and std 1.""" + self.mean = torch.tensor(0) + self.std = torch.tensor(1) + + def fit(self, tensor: Tensor, dim: int = 0, keepdim: bool = False) -> None: + """Compute the mean and standard deviation of the given tensor. + + Args: + tensor (Tensor): Tensor to determine the mean and standard deviation over. + dim (int, optional): Which dimension to take mean and standard deviation + over. Defaults to 0. + keepdim (bool, optional): Whether to keep the reduced dimension in Tensor. + Defaults to False. + """ + self.mean = torch.mean(tensor, dim, keepdim) + self.std = torch.std(tensor, dim, keepdim) + + def norm(self, tensor: Tensor) -> Tensor: + """Normalize a Tensor. + + Args: + tensor (Tensor): Tensor to be normalized + + Returns: + Tensor: Normalized Tensor + """ + return (tensor - self.mean) / self.std + + def denorm(self, normed_tensor: Tensor) -> Tensor: + """Restore normalized Tensor to original. + + Args: + normed_tensor (Tensor): Tensor to be restored + + Returns: + Tensor: Restored Tensor + """ + return normed_tensor * self.std + self.mean + + def state_dict(self) -> dict[str, Tensor]: + """Get Normalizer parameters mean and std. + + Returns: + dict[str, Tensor]: Dictionary storing Normalizer parameters. + """ + return {"mean": self.mean, "std": self.std} + + def load_state_dict(self, state_dict: dict[str, Tensor]) -> None: + """Overwrite Normalizer parameters given a new state_dict. + + Args: + state_dict (dict[str, Tensor]): Dictionary storing Normalizer parameters. + """ + self.mean = state_dict["mean"].cpu() + self.std = state_dict["std"].cpu() + + @classmethod + def from_state_dict(cls, state_dict: dict[str, Tensor]) -> Self: + """Create a new Normalizer given a state_dict. + + Args: + state_dict (dict[str, Tensor]): Dictionary storing Normalizer parameters. + + Returns: + Normalizer + """ + instance = cls() + instance.mean = state_dict["mean"].cpu() + instance.std = state_dict["std"].cpu() + + return instance @dataclass diff --git a/aviary/networks.py b/aviary/networks.py index 32dbcb62..a688aab2 100644 --- a/aviary/networks.py +++ b/aviary/networks.py @@ -1,12 +1,7 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING +from collections.abc import Sequence from torch import Tensor, nn -if TYPE_CHECKING: - from collections.abc import Sequence - class SimpleNetwork(nn.Module): """Simple Feed Forward Neural Network.""" @@ -50,7 +45,7 @@ def __init__( def forward(self, x: Tensor) -> Tensor: """Forward pass through network.""" - for fc, bn, act in zip(self.fcs, self.bns, self.acts): + for fc, bn, act in zip(self.fcs, self.bns, self.acts, strict=False): x = act(bn(fc(x))) return self.fc_out(x) @@ -117,7 +112,9 @@ def __init__( def forward(self, x: Tensor) -> Tensor: """Forward pass through network.""" - for fc, bn, res_fc, act in zip(self.fcs, self.bns, self.res_fcs, self.acts): + for fc, bn, res_fc, act in zip( + self.fcs, self.bns, self.res_fcs, self.acts, strict=False + ): x = act(bn(fc(x))) + res_fc(x) return self.fc_out(x) diff --git a/aviary/predict.py b/aviary/predict.py index 7c0f1547..97f9c0e2 100644 --- a/aviary/predict.py +++ b/aviary/predict.py @@ -1,27 +1,13 @@ -# ruff: noqa: E501 -from __future__ import annotations - -import os -from typing import TYPE_CHECKING, Any - import numpy as np import pandas as pd import torch from torch.nn.functional import softmax +from torch.utils.data import DataLoader from tqdm import tqdm -from aviary.core import Normalizer, sampled_softmax -from aviary.utils import get_metrics, print_walltime - -if TYPE_CHECKING: - import wandb.apis.public - from torch.utils.data import DataLoader - - from aviary.core import BaseModelClass - from aviary.data import InMemoryDataLoader - -__author__ = "Janosh Riebesell" -__date__ = "2022-08-25" +from aviary.core import BaseModelClass, Normalizer, sampled_softmax +from aviary.data import InMemoryDataLoader +from aviary.utils import get_metrics def make_ensemble_predictions( @@ -38,30 +24,32 @@ def make_ensemble_predictions( """Make predictions using an ensemble of models. Args: - checkpoint_paths (list[str]): File paths to model checkpoints created with torch.save(). + checkpoint_paths (list[str]): File paths to model checkpoints created with + torch.save(). data_loader (DataLoader | InMemoryDataLoader): Data loader to use for predictions. model_cls (type[BaseModelClass]): Model class to use for predictions. - df (pd.DataFrame): Dataframe to make predictions on. Will be returned with additional - columns holding model predictions (and uncertainties for robust models) for each - model checkpoint. - target_col (str): Column holding target values. Defaults to None. If None, will not print - performance metrics. - input_col (str, optional): Column holding input values. Defaults to 'wyckoff'. - device (str, optional): torch.device. Defaults to "cuda" if torch.cuda.is_available() - else "cpu". - print_metrics (bool, optional): Whether to print performance metrics. Defaults to True - if target_col is not None. - warn_target_mismatch (bool, optional): Whether to warn if target_col != target_name from - model checkpoint. Defaults to False. + df (pd.DataFrame): Dataframe to make predictions on. Will be returned with + additional columns holding model predictions (and uncertainties for robust + columns holding model predictions (and uncertainties for robust models) + for each model checkpoint. + target_col (str): Column holding target values. Defaults to None. If None, will + not print performance metrics. + device (str, optional): torch.device. Defaults to "cuda" if + torch.cuda.is_available() else "cpu". + print_metrics (bool, optional): Whether to print performance metrics. Defaults + to True if target_col is not None. + warn_target_mismatch (bool, optional): Whether to warn if target_col != + target_name from model checkpoint. Defaults to False. pbar (bool, optional): Whether to show progress bar running over checkpoints. Defaults to True. Returns: - pd.DataFrame: Input dataframe with added columns for model and ensemble predictions. If - target_col is not None, returns a 2nd dataframe containing model and ensemble metrics. + pd.DataFrame: Input dataframe with added columns for model and ensemble + predictions. If target_col is not None, returns a 2nd dataframe + containing model and ensemble metrics. """ - # TODO: Add support for predicting all tasks a multi-task models was trained on. Currently only - # handles single targets. Low priority as multi-tasking is rarely used. + # TODO: Add support for predicting all tasks a multi-task models was trained on. + # Currently only handles single targets. Low priority as multi-tasking is rarely used. if not checkpoint_paths: raise ValueError(f"{checkpoint_paths=} must not be empty") @@ -88,8 +76,9 @@ def make_ensemble_predictions( assert task_type in ("regression", "classification"), f"invalid {task_type = }" if warn_target_mismatch and target_name != target_col: print( - f"Warning: {target_col = } does not match {target_name = } in checkpoint. If this " - "is not by accident, disable this warning by passing warn_target_mismatch=False." + f"Warning: {target_col = } does not match {target_name = } in " + f"{checkpoint_path=}. If this is not by accident, disable this warning " + "by passing warn_target_mismatch=False." ) model = model_cls(**model_params) model.to(device) @@ -184,65 +173,3 @@ def make_ensemble_predictions( return df, df_metrics return df - - -@print_walltime(end_desc="predict_from_wandb_checkpoints") -def predict_from_wandb_checkpoints( - runs: list[wandb.apis.public.Run], - checkpoint_filename: str = "checkpoint.pth", - cache_dir: str = "./checkpoint_cache", - **kwargs: Any, -) -> pd.DataFrame | tuple[pd.DataFrame, pd.DataFrame]: - """Download and cache checkpoints for an ensemble of models, then make - predictions on some dataset. Finally print ensemble metrics and store - predictions to CSV. - - Args: - runs (list[wandb.apis.public.Run]): List of WandB runs to download model - checkpoints from which are then loaded into memory to generate - predictions for the input_col in df. - checkpoint_filename (str): Name of the checkpoint file to download. - cache_dir (str): Directory to cache downloaded checkpoints in. - **kwargs: Additional keyword arguments to pass to make_ensemble_predictions(). - - Returns: - pd.DataFrame | tuple[pd.DataFrame, pd.DataFrame]: Original input dataframe - with added columns for model predictions and uncertainties. The optional - 2nd dataframe holds ensemble performance metrics like mean and standard - deviation of MAE/RMSE. - """ - print(f"Using checkpoints from {len(runs)} run(s):") - - run_target = runs[0].config["target"] - assert all(run_target == run.config["target"] for run in runs), ( - f"Runs have differing targets, first {run_target=}" - ) - - target_col = kwargs.get("target_col") - if target_col and target_col != run_target: - print(f"\nWarning: {target_col=} does not match {run_target=}") - - checkpoint_paths: list[str] = [] - - for idx, run in enumerate(runs, start=1): - run_path = "/".join(run.path) - out_dir = f"{cache_dir}/{run_path}" - os.makedirs(out_dir, exist_ok=True) - - checkpoint_path = f"{out_dir}/{checkpoint_filename}" - checkpoint_paths.append(checkpoint_path) - print(f"{idx:>3}/{len(runs)}: {run.url}\n\t{checkpoint_path}\n") - - with open(f"{out_dir}/run.md", "w") as md_file: - md_file.write(f"[{run.name}]({run.url})\n") - - if not os.path.isfile(checkpoint_path): - run.file(f"{checkpoint_filename}").download(root=out_dir) - - if target_col is not None: - df, ensemble_metrics = make_ensemble_predictions(checkpoint_paths, **kwargs) - # round to save disk space and speed up cloud storage uploads - return df.round(6), ensemble_metrics - - df = make_ensemble_predictions(checkpoint_paths, **kwargs) - return df.round(6) diff --git a/aviary/roost/data.py b/aviary/roost/data.py index 00821668..3f84abb0 100644 --- a/aviary/roost/data.py +++ b/aviary/roost/data.py @@ -1,10 +1,10 @@ -from __future__ import annotations - import json +from collections.abc import Sequence from functools import cache -from typing import TYPE_CHECKING, Any +from typing import Any import numpy as np +import pandas as pd import torch from pymatgen.core import Composition from torch import LongTensor, Tensor @@ -12,11 +12,6 @@ from aviary import PKG_DIR -if TYPE_CHECKING: - from collections.abc import Sequence - - import pandas as pd - class CompositionData(Dataset): """Dataset class for the Roost composition model.""" @@ -149,10 +144,9 @@ def collate_batch( Args: samples (list): list of tuples for each data point where each tuple contains: (elem_fea, nbr_fea, nbr_idx, target) - - elem_fea (Tensor): _description_ - - nbr_fea (Tensor): - - self_idx (LongTensor): - - nbr_idx (LongTensor): + - elem_fea (Tensor): Atom hidden features before convolution + - self_idx (LongTensor): Indices of the atom's self + - nbr_idx (LongTensor): Indices of M neighbors of each atom - target (Tensor | LongTensor): target values containing floats for regression or integers as class labels for classification - cif_id: str or int @@ -207,6 +201,8 @@ def collate_batch( torch.cat(batch_nbr_idx, dim=0), torch.cat(crystal_elem_idx), ), - tuple(torch.stack(b_target, dim=0) for b_target in zip(*batch_targets)), - *zip(*batch_cry_ids), + tuple( + torch.stack(b_target, dim=0) for b_target in zip(*batch_targets, strict=False) + ), + *zip(*batch_cry_ids, strict=False), ) diff --git a/aviary/roost/model.py b/aviary/roost/model.py index ac9ea36e..fec22196 100644 --- a/aviary/roost/model.py +++ b/aviary/roost/model.py @@ -1,6 +1,4 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING +from collections.abc import Sequence import torch import torch.nn.functional as F @@ -11,9 +9,6 @@ from aviary.networks import ResidualNetwork, SimpleNetwork from aviary.segments import MessageLayer, WeightedAttentionPooling -if TYPE_CHECKING: - from collections.abc import Sequence - @due.dcite(Doi("10.1038/s41467-020-19964-7"), description="Roost model") class Roost(BaseModelClass): @@ -43,30 +38,7 @@ def __init__( out_hidden: Sequence[int] = (256, 128, 64), **kwargs, ) -> None: - """Composition-only model. - - Args: - robust (bool): If True, the number of model outputs is doubled. 2nd output - for each target will be an estimate for the aleatoric uncertainty - (uncertainty inherent to the sample) which can be used with a robust - loss function to attenuate the weighting of uncertain samples. - n_targets (list[int]): Number of targets to train on - elem_emb_len (int): Number of features in initial element embedding - elem_fea_len (int, optional): Number of hidden features to use to encode - elements. Defaults to 64. - n_graph (int, optional): Number of message passing operations to carry out. - Defaults to 3. - elem_heads (int, optional): Number of parallel attention heads per message - passing operation. Defaults to 3. - elem_gate (list[int], optional): _description_. Defaults to (256,). - elem_msg (list[int], optional): _description_. Defaults to (256,). - cry_heads (int, optional): _description_. Defaults to 3. - cry_gate (list[int], optional): _description_. Defaults to (256,). - cry_msg (list[int], optional): _description_. Defaults to (256,). - trunk_hidden (list[int], optional): _description_. Defaults to (1024, 512). - out_hidden (list[int], optional): _description_. Defaults to (256, 128, 64). - **kwargs: Additional keyword arguments to pass to BaseModelClass. - """ + """Composition-only model.""" super().__init__(robust=robust, **kwargs) desc_dict = { @@ -110,18 +82,7 @@ def forward( nbr_idx: LongTensor, cry_elem_idx: LongTensor, ) -> tuple[Tensor, ...]: - """Forward pass through the material_nn and output_nn. - - Args: - elem_weights (Tensor): _description_ - elem_fea (Tensor): _description_ - self_idx (LongTensor): _description_ - nbr_idx (LongTensor): _description_ - cry_elem_idx (LongTensor): _description_ - - Returns: - tuple[Tensor, ...]: _description_ - """ + """Forward pass through the material_nn and output_nn.""" crys_fea = self.material_nn( elem_weights, elem_fea, self_idx, nbr_idx, cry_elem_idx ) @@ -149,19 +110,6 @@ def __init__( ) -> None: """Bundles n_graph message passing layers followed by cry_heads weighted attention pooling layers. - - Args: - elem_emb_len (int): Element embedding length. - elem_fea_len (int, optional): Element feature length. Defaults to 64. - n_graph (int, optional): Number of message-passing layers. Defaults to 3. - elem_heads (int, optional): Message-passing heads in each MP layer. - Defaults to 3. - elem_gate (list[int], optional): Message gate layers in each MP layer. - Defaults to (256,). - elem_msg (list[int], optional): _description_. Defaults to (256,). - cry_heads (int, optional): _description_. Defaults to 3. - cry_gate (list[int], optional): _description_. Defaults to (256,). - cry_msg (list[int], optional): _description_. Defaults to (256,). """ super().__init__() diff --git a/aviary/segments.py b/aviary/segments.py index b101b3ef..6a9d0983 100644 --- a/aviary/segments.py +++ b/aviary/segments.py @@ -1,6 +1,4 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING +from collections.abc import Sequence import torch from torch import LongTensor, Tensor, nn @@ -8,9 +6,6 @@ from aviary.networks import SimpleNetwork from aviary.scatter import scatter_reduce -if TYPE_CHECKING: - from collections.abc import Sequence - class AttentionPooling(nn.Module): """Softmax attention layer. Currently unused.""" diff --git a/aviary/utils.py b/aviary/utils.py index ff78311e..1b924092 100644 --- a/aviary/utils.py +++ b/aviary/utils.py @@ -1,17 +1,18 @@ -from __future__ import annotations - import os import sys import time from collections import defaultdict +from collections.abc import Callable, Generator, Iterable from contextlib import contextmanager from datetime import datetime from pickle import PickleError -from typing import TYPE_CHECKING, Any, Callable, Literal +from types import ModuleType +from typing import Any, Literal import numpy as np import pandas as pd import torch +import wandb from sklearn.metrics import ( accuracy_score, balanced_accuracy_score, @@ -24,17 +25,14 @@ from torch.nn import CrossEntropyLoss, L1Loss, MSELoss, NLLLoss from torch.optim import SGD, Adam, AdamW, Optimizer from torch.optim.lr_scheduler import MultiStepLR, _LRScheduler -from torch.utils.data import DataLoader, Dataset, Subset +from torch.utils.data import DataLoader, Subset from torch.utils.tensorboard import SummaryWriter from aviary import ROOT from aviary.core import BaseModelClass, Normalizer, TaskType, sampled_softmax +from aviary.data import InMemoryDataLoader from aviary.losses import robust_l1_loss, robust_l2_loss -if TYPE_CHECKING: - from collections.abc import Generator, Iterable - from types import ModuleType - def initialize_model( model_class: BaseModelClass, @@ -283,10 +281,9 @@ def train_ensemble( run_id: int, ensemble_folds: int, epochs: int, - train_set: Dataset | Subset, - val_set: Dataset | Subset, - log: bool, - data_params: dict[str, Any], + train_loader: DataLoader, + val_loader: DataLoader | None, + log: Literal["tensorboard", "wandb"], setup_params: dict[str, Any], restart_params: dict[str, Any], model_params: dict[str, Any], @@ -303,10 +300,9 @@ def train_ensemble( run_id (int): Unique identifier of the model run. ensemble_folds (int): Number of members in ensemble. epochs (int): Number of epochs to train for. - train_set (Subset): Dataloader containing training data. - val_set (Subset): Dataloader containing validation data. + train_loader (DataLoader): Dataloader containing training data. + val_loader (DataLoader | None): Dataloader containing validation data. log (bool): Whether to log intermediate metrics to TensorBoard. - data_params (dict[str, Any]): Dictionary of data loader parameters setup_params (dict[str, Any]): Dictionary of setup parameters restart_params (dict[str, Any]): Dictionary of restart parameters model_params (dict[str, Any]): Dictionary of model parameters @@ -316,16 +312,6 @@ def train_ensemble( when early stopping. Defaults to None. verbose (bool, optional): Whether to show progress bars for each epoch. """ - train_loader = DataLoader(train_set, **data_params) - print(f"Training on {len(train_set):,} samples") - - if val_set is not None: - data_params.update({"batch_size": 16 * data_params["batch_size"]}) - val_loader = DataLoader(val_set, **data_params) - print(f"Validating on {len(val_set):,} samples") - else: - val_loader = None - # this allows us to run ensembles in parallel rather than in series # by specifying the run-id arg. for r_id in [run_id] if ensemble_folds == 1 else range(ensemble_folds): @@ -350,25 +336,44 @@ def train_ensemble( for target, normalizer in normalizer_dict.items(): if normalizer is not None: - if isinstance(train_set, Subset): - sample_target = Tensor( - train_set.dataset.df[target].iloc[train_set.indices].values - ) + if isinstance(train_loader, InMemoryDataLoader): + # FIXME: this is really brittle but it works for now. + sample_target = train_loader.tensors[1] else: - sample_target = Tensor(train_set.df[target].values) + data = train_loader.dataset + if isinstance(train_loader.dataset, Subset): + sample_target = Tensor( + data.dataset.df[target].iloc[data.indices].to_numpy() + ) + else: + sample_target = Tensor(data.df[target].to_numpy()) if not restart_params["resume"]: normalizer.fit(sample_target) print(f"Dummy MAE: {(sample_target - normalizer.mean).abs().mean():.4f}") - if log: + if log == "tensorboard": writer = SummaryWriter( f"{ROOT}/runs/{model_name}/{model_name}-r{r_id}_{datetime.now():%d-%m-%Y_%H-%M-%S}" ) + elif log == "wandb": + wandb.init( + project="lightning_logs", + # https://docs.wandb.ai/guides/track/launch#init-start-error + settings=wandb.Settings(start_method="fork"), + name=f"{model_name}-r{r_id}", + config={ + "model_params": model_params, + "setup_params": setup_params, + "restart_params": restart_params, + "loss_dict": loss_dict, + }, + ) + writer = "wandb" else: writer = None - if (val_set is not None) and (model.best_val_scores is None): + if (val_loader is not None) and (model.best_val_scores is None): print("Getting Validation Baseline") with torch.no_grad(): v_metrics = model.evaluate( @@ -406,15 +411,13 @@ def train_ensemble( ) -# TODO find a better name for this function @janosh @torch.no_grad() def results_multitask( model_class: BaseModelClass, model_name: str, run_id: int, ensemble_folds: int, - test_set: Dataset | Subset, - data_params: dict[str, Any], + test_loader: DataLoader | InMemoryDataLoader, robust: bool, task_dict: dict[str, TaskType], device: type[torch.device] | Literal["cuda", "cpu"], @@ -429,8 +432,7 @@ def results_multitask( model_name (str): String describing the model. run_id (int): Unique identifier of the model run. ensemble_folds (int): Number of members in ensemble. - test_set (Subset): Dataloader containing testing data. - data_params (dict[str, Any]): Dictionary of data loader parameters + test_loader (DataLoader): Dataloader containing testing data. robust (bool): Whether to estimate standard deviation for use in a robust loss function. task_dict (dict[str, TaskType]): Map of target names to "regression" or @@ -457,15 +459,17 @@ def results_multitask( "------------Evaluate model on Test Set------------\n" "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" ) - test_loader = DataLoader(test_set, **data_params) - print(f"Testing on {len(test_set):,} samples") - results_dict: dict[str, dict[str, list | np.ndarray]] = {} + n_test = ( + len(test_loader.tensors[0]) + if isinstance(test_loader, InMemoryDataLoader) + else len(test_loader.dataset) + ) for target_name, task_type in task_dict.items(): results_dict[target_name] = defaultdict( list if task_type == "classification" - else lambda: np.zeros((ensemble_folds, len(test_set))) # type: ignore[call-overload] + else lambda: np.zeros((ensemble_folds, n_test)) # type: ignore[call-overload] ) for ens_idx in range(ensemble_folds): @@ -488,7 +492,7 @@ def results_multitask( f"provided {task_dict=}" ) - model = model_class(**checkpoint["model_params"]) + model: BaseModelClass = model_class(**checkpoint["model_params"]) model.to(device) model.load_state_dict(checkpoint["state_dict"]) @@ -502,7 +506,7 @@ def results_multitask( y_test, outputs, *ids = model.predict(test_loader) for output, targets, (target_name, task_type), res_dict in zip( - outputs, y_test, model.task_dict.items(), results_dict.values() + outputs, y_test, model.task_dict.items(), results_dict.values(), strict=False ): if task_type == "regression": normalizer = normalizer_dict[target_name] @@ -533,10 +537,14 @@ def results_multitask( res_dict["targets"] = targets - # TODO cleaner way to get identifier names if save_results: + identifier_names = ( + [f"idx_{i}" for i in range(len(ids))] + if isinstance(test_loader, InMemoryDataLoader) + else test_loader.dataset.dataset.identifiers + ) save_results_dict( - dict(zip(test_loader.dataset.dataset.identifiers, *ids)), + dict(zip(identifier_names, *ids, strict=False)), results_dict, model_name, f"-r{run_id}", diff --git a/aviary/wren/data.py b/aviary/wren/data.py index 70e17f00..fe16937c 100644 --- a/aviary/wren/data.py +++ b/aviary/wren/data.py @@ -1,11 +1,11 @@ -from __future__ import annotations - import json +from collections.abc import Sequence from functools import cache from itertools import groupby -from typing import TYPE_CHECKING, Any +from typing import Any import numpy as np +import pandas as pd import torch from pymatgen.analysis.prototypes import ( RE_SUBST_ONE_PREFIX, @@ -18,11 +18,6 @@ from aviary import PKG_DIR -if TYPE_CHECKING: - from collections.abc import Sequence - - import pandas as pd - class WyckoffData(Dataset): """Wyckoff dataset class for the Wren model.""" @@ -33,8 +28,8 @@ def __init__( task_dict: dict[str, str], elem_embedding: str = "matscholar200", sym_emb: str = "bra-alg-off", - inputs: str = "wyckoff", - identifiers: Sequence[str] = ("material_id", "composition", "wyckoff"), + inputs: str = "protostructure", + identifiers: Sequence[str] = ("material_id", "composition", "protostructure"), ): """Data class for Wren models. @@ -48,10 +43,10 @@ def __init__( sym_emb (str): Symmetry embedding. One of "bra-alg-off" (default) or "spg-alg-off" or path to a file with custom symmetry embeddings. inputs (str, optional): df columns to be used for featurization. - Defaults to "wyckoff". + Defaults to "protostructure". identifiers (list, optional): df columns for distinguishing data points. Will be copied over into the model's output CSV. Defaults to - ["material_id", "composition", "wyckoff"]. + ["material_id", "composition", "protostructure"]. """ if len(identifiers) < 2: raise AssertionError("Two identifiers are required") @@ -180,23 +175,6 @@ def collate_batch( ) -> tuple[Any, ...]: """Collate a list of data and return a batch for predicting crystal properties. - - Args: - samples ([tuple]): list of tuples for each data point. - (elem_fea, nbr_fea, nbr_idx, target) - - elem_fea (Tensor): Node features from atom type and Wyckoff letter - nbr_fea (Tensor): _description_ - nbr_idx (LongTensor): - target (Tensor): - cif_id: str or int - - Returns: - tuple[ - tuple[Tensor * 3, LongTensor * 4]: batched Wren model inputs, - tuple[Tensor | LongTensor]: Target values for different tasks, - *tuple[str | int]]: Identifiers like material_id, composition - ] """ # define the lists batch_mult_weights = [] @@ -251,8 +229,10 @@ def collate_batch( torch.cat(crystal_wyk_idx), torch.cat(aug_cry_idx), ), - tuple(torch.stack(b_target, dim=0) for b_target in zip(*batch_targets)), - *zip(*batch_cry_ids), + tuple( + torch.stack(b_target, dim=0) for b_target in zip(*batch_targets, strict=False) + ), + *zip(*batch_cry_ids, strict=False), ) @@ -283,7 +263,7 @@ def parse_protostructure_label( elements = [] wyckoff_set = [] - for el, wyk_letters_per_elem in zip(elems, wyckoff_letters): + for el, wyk_letters_per_elem in zip(elems, wyckoff_letters, strict=False): # Normalize Wyckoff letters to start with 1 if missing digit wyk_letters_normalized = RE_WYCKOFF_NO_PREFIX.sub( RE_SUBST_ONE_PREFIX, wyk_letters_per_elem @@ -296,7 +276,7 @@ def parse_protostructure_label( mults = map(int, sep_n_wyks[0::2]) letters = sep_n_wyks[1::2] - for mult, letter in zip(mults, letters): + for mult, letter in zip(mults, letters, strict=False): elements.extend([el] * mult) wyckoff_set.extend([letter] * mult) wyckoff_site_multiplicities.extend( diff --git a/aviary/wren/model.py b/aviary/wren/model.py index f17764b1..6e6da581 100644 --- a/aviary/wren/model.py +++ b/aviary/wren/model.py @@ -1,6 +1,4 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING +from collections.abc import Sequence import torch import torch.nn.functional as F @@ -12,9 +10,6 @@ from aviary.scatter import scatter_reduce from aviary.segments import MessageLayer, WeightedAttentionPooling -if TYPE_CHECKING: - from collections.abc import Sequence - @due.dcite(Doi("10.1126/sciadv.abn4117"), description="Wren model") class Wren(BaseModelClass): @@ -46,34 +41,7 @@ def __init__( out_hidden: Sequence[int] = (256, 128, 64), **kwargs, ) -> None: - """Composition plus symmetry model. - - Args: - robust (bool): If True, the number of model outputs is doubled. 2nd output - for each target will be an estimate for the aleatoric uncertainty ( - uncertainty inherent to the sample) which can be used with a robust loss - function to attenuate the weighting of uncertain samples. - n_targets (list[int]): Number of targets to train on. 1 for regression and - number of different class labels for classification. - elem_emb_len (int): Number of features in initial element embedding - sym_emb_len (int): Number of features in initial Wyckoff letter embedding - elem_fea_len (int, optional): Number of hidden features to use to encode - elements. Defaults to 32. - sym_fea_len (int, optional): Number of hidden features to use to encode - Wyckoff letters. Defaults to 32. - n_graph (int, optional): Number of message passing operations to carry out. - Defaults to 3. - elem_heads (int, optional): Number of parallel attention heads per message - passing operation. Defaults to 1. - elem_gate (list[int], optional): _description_. Defaults to [256]. - elem_msg (list[int], optional): _description_. Defaults to [256]. - cry_heads (int, optional): _description_. Defaults to 1. - cry_gate (list[int], optional): _description_. Defaults to [256]. - cry_msg (list[int], optional): _description_. Defaults to [256]. - trunk_hidden (list[int], optional): _description_. Defaults to [1024, 512]. - out_hidden (list[int], optional): _description_. Defaults to [256, 128, 64]. - **kwargs: Additional keyword arguments to pass to BaseModelClass. - """ + """Protostructure based model.""" super().__init__(robust=robust, **kwargs) desc_dict = { @@ -123,20 +91,7 @@ def forward( cry_elem_idx: LongTensor, aug_cry_idx: LongTensor, ) -> tuple[Tensor, ...]: - """Forward pass through the material_nn and output_nn. - - Args: - elem_weights (Tensor): _description_ - elem_fea (Tensor): _description_ - sym_fea (Tensor): _description_ - self_idx (LongTensor): _description_ - nbr_idx (LongTensor): _description_ - cry_elem_idx (LongTensor): _description_ - aug_cry_idx (LongTensor): _description_ - - Returns: - tuple[Tensor, ...]: Predicted values for each target - """ + """Forward pass through the material_nn and output_nn.""" crys_fea = self.material_nn( elem_weights, elem_fea, @@ -170,25 +125,7 @@ def __init__( cry_gate: Sequence[int] = (256,), cry_msg: Sequence[int] = (256,), ): - """Message passing section of the Roost model. - - Args: - elem_emb_len (int): Number of features in initial element embedding - sym_emb_len (int): Number of features in initial Wyckoff letter embedding - elem_fea_len (int, optional): Number of hidden features to use to encode - elements. Defaults to 32. - sym_fea_len (int, optional): Number of hidden features to use to encode - Wyckoff letters. Defaults to 32. - n_graph (int, optional): Number of message passing operations to carry out. - Defaults to 3. - elem_heads (int, optional): Number of parallel attention heads per message - passing operation. Defaults to 1. - elem_gate (list[int], optional): _description_. Defaults to [256]. - elem_msg (list[int], optional): _description_. Defaults to [256]. - cry_heads (int, optional): Number of attention heads. Defaults to 1. - cry_gate (list[int], optional): _description_. Defaults to [256]. - cry_msg (list[int], optional): _description_. Defaults to [256]. - """ + """Message passing section of the Roost model.""" super().__init__() # apply linear transform to the input to get a trainable embedding diff --git a/aviary/wrenformer/data.py b/aviary/wrenformer/data.py index 75a694c9..20fa2387 100644 --- a/aviary/wrenformer/data.py +++ b/aviary/wrenformer/data.py @@ -1,10 +1,10 @@ -from __future__ import annotations - import json +from collections.abc import Callable from functools import cache -from typing import TYPE_CHECKING, Any, Literal +from typing import Any, Literal import numpy as np +import pandas as pd import torch from pymatgen.core import Composition from torch import LongTensor, Tensor, nn @@ -13,9 +13,6 @@ from aviary.data import InMemoryDataLoader from aviary.wren.data import parse_protostructure_label -if TYPE_CHECKING: - import pandas as pd - def collate_batch( features: tuple[Tensor], targets: Tensor | LongTensor, ids: list[str | int] @@ -131,7 +128,7 @@ def get_composition_embedding(formula: str) -> Tensor: Tensor: Shape (n_elements, n_features). Usually (2-6, 200). """ composition_dict = Composition(formula).get_el_amt_dict() - elements, elem_weights = zip(*composition_dict.items()) + elements, elem_weights = zip(*composition_dict.items(), strict=False) elem_weights = np.atleast_2d(elem_weights).T / sum(elem_weights) @@ -147,11 +144,12 @@ def get_composition_embedding(formula: str) -> Tensor: def df_to_in_mem_dataloader( df: pd.DataFrame, - input_col: str = "wyckoff", + input_col: str = "protostructure", target_col: str | None = None, id_col: str | None = None, - embedding_type: Literal["wyckoff", "composition"] = "wyckoff", + embedding_type: Literal["protostructure", "composition"] = "protostructure", device: str | None = None, + collate_fn: Callable = collate_batch, **kwargs: Any, ) -> InMemoryDataLoader: """Construct an InMemoryDataLoader with Wrenformer batch collation from a dataframe. @@ -162,15 +160,17 @@ def df_to_in_mem_dataloader( df (pd.DataFrame): Expected to have columns input_col, target_col, id_col. input_col (str): Column name holding the input values (Aflow Wyckoff labels or composition strings) from which initial embeddings will be constructed. - Defaults to "wyckoff". + Defaults to "protostructure". target_col (str): Column name holding the target values. Defaults to None. Only leave this empty if making predictions since target tensor will be set to list of Nones. id_col (str): Column name holding sample IDs. Defaults to None. If None, IDs will be the dataframe index. - embedding_type ('wyckoff' | 'composition'): Defaults to "wyckoff". + embedding_type ('protostructure' | 'composition'): Defaults to "protostructure". device (str): torch.device to load tensors onto. Defaults to "cuda" if torch.cuda.is_available() else "cpu". + collate_fn (Callable): Function to collate data into a batch. Defaults to + collate_batch. kwargs (dict): Keyword arguments like batch_size: int and shuffle: bool to pass to InMemoryDataLoader. Defaults to None. @@ -181,12 +181,12 @@ def df_to_in_mem_dataloader( if device is None: device = "cuda" if torch.cuda.is_available() else "cpu" - if embedding_type not in ("wyckoff", "composition"): - raise ValueError(f"{embedding_type = } must be 'wyckoff' or 'composition'") + if embedding_type not in ("protostructure", "composition"): + raise ValueError(f"{embedding_type = } must be 'protostructure' or 'composition'") initial_embeddings = df[input_col].map( wyckoff_embedding_from_protostructure_label - if embedding_type == "wyckoff" + if embedding_type == "protostructure" else get_composition_embedding ) targets = ( @@ -202,4 +202,4 @@ def df_to_in_mem_dataloader( inputs[idx] = tensor.to(device) ids = df.get(id_col, df.index).to_numpy() - return InMemoryDataLoader([inputs, targets, ids], collate_fn=collate_batch, **kwargs) + return InMemoryDataLoader([inputs, targets, ids], collate_fn=collate_fn, **kwargs) diff --git a/aviary/wrenformer/model.py b/aviary/wrenformer/model.py index 5dc1405b..2c08eeb9 100644 --- a/aviary/wrenformer/model.py +++ b/aviary/wrenformer/model.py @@ -1,18 +1,13 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING, Callable +from collections.abc import Sequence import torch import torch.nn.functional as F from pymatgen.util.due import Doi, due from torch import BoolTensor, Tensor, nn -from aviary.core import BaseModelClass, masked_max, masked_mean, masked_min, masked_std +from aviary.core import AGGREGATORS, BaseModelClass from aviary.networks import ResidualNetwork -if TYPE_CHECKING: - from collections.abc import Sequence - @due.dcite(Doi("10.48550/arXiv.2308.14920"), description="Wrenformer model") @due.dcite(Doi("10.1038/s41524-021-00545-1"), description="Crabnet model") @@ -36,14 +31,15 @@ class Wrenformer(BaseModelClass): def __init__( self, + robust: bool, n_targets: Sequence[int], n_features: int, d_model: int = 128, n_attn_layers: int = 6, n_attn_heads: int = 4, + dropout: float = 0.0, trunk_hidden: Sequence[int] = (1024, 512), out_hidden: Sequence[int] = (256, 128, 64), - robust: bool = False, embedding_aggregations: Sequence[str] = ("mean",), **kwargs, ) -> None: @@ -60,6 +56,8 @@ def __init__( to 3. n_attn_heads (int): Number of attention heads to use in the transformer. d_model needs to be divisible by this number. Defaults to 4. + dropout (float, optional): Dropout rate for the transformer encoder. Defaults + to 0. trunk_hidden (list[int], optional): Number of hidden units in the trunk network which is shared across tasks when multitasking. Defaults to [1024, 512]. @@ -77,14 +75,32 @@ def __init__( """ super().__init__(robust=robust, **kwargs) + model_params = { + "robust": robust, + "n_targets": n_targets, + "n_features": n_features, + "d_model": d_model, + "n_attn_layers": n_attn_layers, + "n_attn_heads": n_attn_heads, + "dropout": dropout, + "trunk_hidden": trunk_hidden, + "out_hidden": out_hidden, + "embedding_aggregations": embedding_aggregations, + } + self.model_params.update(model_params) + # up- or down-size embedding dimension (n_features) to model dimension (d_model) self.resize_embedding = nn.Linear(n_features, d_model) transformer_layer = nn.TransformerEncoderLayer( - d_model=d_model, nhead=n_attn_heads, batch_first=True + d_model=d_model, + nhead=n_attn_heads, + batch_first=True, + norm_first=True, + dropout=dropout, ) self.transformer_encoder = nn.TransformerEncoder( - transformer_layer, num_layers=n_attn_layers + transformer_layer, num_layers=n_attn_layers, enable_nested_tensor=False ) if self.robust: @@ -103,9 +119,7 @@ def __init__( ResidualNetwork(out_hidden[0], n, out_hidden[1:]) for n in n_targets ) - def forward( # type: ignore[override] - self, features: Tensor, mask: BoolTensor, *args - ) -> tuple[Tensor, ...]: + def forward(self, features: Tensor, mask: BoolTensor, *args) -> tuple[Tensor, ...]: """Forward pass through the Wrenformer. Args: @@ -146,7 +160,7 @@ def forward( # type: ignore[override] # careful to ignore padded values when taking the mean inv_mask: torch.BoolTensor = ~mask[..., None] - aggregation_funcs = [aggregators[key] for key in self.embedding_aggregations] + aggregation_funcs = [AGGREGATORS[key] for key in self.embedding_aggregations] aggregated_embeddings = torch.cat( [func(embeddings, inv_mask, 1) for func in aggregation_funcs], dim=1 ) @@ -155,13 +169,3 @@ def forward( # type: ignore[override] predictions = F.relu(self.trunk_nn(aggregated_embeddings)) return tuple(output_nn(predictions) for output_nn in self.output_nns) - - -# map aggregation types to functions -aggregators: dict[str, Callable[[Tensor, BoolTensor, int], Tensor]] = { - "mean": masked_mean, - "std": masked_std, - "max": masked_max, - "min": masked_min, - "sum": lambda x, mask, dim: (x * mask).sum(dim=dim), -} diff --git a/examples/cgcnn-example.py b/examples/cgcnn-example.py index 7d398c33..aeb4cf57 100644 --- a/examples/cgcnn-example.py +++ b/examples/cgcnn-example.py @@ -4,6 +4,7 @@ import torch from pymatgen.core import Structure from sklearn.model_selection import train_test_split as split +from torch.utils.data import DataLoader from aviary import ROOT from aviary.cgcnn.data import CrystalGraphData, collate_batch @@ -85,8 +86,8 @@ def main( "Cannot fine-tune and transfer checkpoint(s) at the same time." ) - task_dict = dict(zip(targets, tasks)) - loss_dict = dict(zip(targets, losses)) + task_dict = dict(zip(targets, tasks, strict=False)) + loss_dict = dict(zip(targets, losses, strict=False)) dist_dict = { "radius": radius, @@ -200,6 +201,20 @@ def main( } if train: + train_loader = DataLoader(train_set, **data_params) + + if val_set is not None: + val_loader = DataLoader( + val_set, + **{ + **data_params, + "batch_size": 16 * data_params["batch_size"], + "shuffle": False, + }, + ) + else: + val_loader = None + train_ensemble( model_class=CrystalGraphConvNet, model_name=model_name, @@ -207,10 +222,9 @@ def main( ensemble_folds=ensemble, epochs=epochs, patience=patience, - train_set=train_set, - val_set=val_set, + train_loader=train_loader, + val_loader=val_loader, log=log, - data_params=data_params, setup_params=setup_params, restart_params=restart_params, model_params=model_params, @@ -218,19 +232,21 @@ def main( ) if evaluate: - data_reset = { - "batch_size": 16 * batch_size, # faster model inference - "shuffle": False, # need fixed data order due to ensembling - } - data_params.update(data_reset) + test_loader = DataLoader( + test_set, + **{ + **data_params, + "batch_size": 64 * data_params["batch_size"], + "shuffle": False, + }, + ) - results_multitask( + _results_dict = results_multitask( model_class=CrystalGraphConvNet, model_name=model_name, run_id=run_id, ensemble_folds=ensemble, - test_set=test_set, - data_params=data_params, + test_loader=test_loader, robust=robust, task_dict=task_dict, device=device, diff --git a/examples/inputs/examples.csv b/examples/inputs/examples.csv index 6b5ade05..9b95f0b9 100644 --- a/examples/inputs/examples.csv +++ b/examples/inputs/examples.csv @@ -1,4 +1,4 @@ -material_id,composition,E_f,wyckoff +material_id,composition,E_f,protostructure c07b988125b3a0adc329b2449eeaac24c9e7def8,Hf,0.0,A_hP2_194_c:Hf 0060794138df3ba93c68007949b0a72d19cb4c62,Hf(ZnN2)3,0.6322286350000006,AB6C3_hR30_160_a_2b_b:Hf-N-Zn 004c70f544dca7f8e1c74c6c4ff87a1e355e7cd5,Hf(ZnN2)3,0.8708339350000012,AB6C3_hR30_148_a_f_bc:Hf-N-Zn diff --git a/examples/inputs/examples.json b/examples/inputs/examples.json index 71748d80..48918362 100644 --- a/examples/inputs/examples.json +++ b/examples/inputs/examples.json @@ -1 +1 @@ -{"material_id":{"0":"c07b988125b3a0adc329b2449eeaac24c9e7def8","56":"0060794138df3ba93c68007949b0a72d19cb4c62","57":"004c70f544dca7f8e1c74c6c4ff87a1e355e7cd5","29":"0059fd6dd1d17138c42bb5430fa0bc074053f0de","39":"00a8d0f6f55191596770605314ff347995a3540d","49":"006197ce31efdef23c82f0f6cec08ac0b0febdce","5":"0019407b910a29730999dab65491b4e50624c219","19":"0039f3c461ce4a2cbf4c48b09bfc3c6b13a5c769","45":"0079b9e3ab0e210ea4afe037a9faee8cd6577922","6":"00021364446a637881257fd9ee912a422a6b1753","16":"00cca7ad273875ba80f1d437af797b6a01cc6ebd","50":"00ceac1a8da8e554218a84def07e5a6da9f106f3","30":"00ecadb66a8baab030675a817d2ee15f0002a4dc","64":"00fa7d75b7b2e1442df0a68071210c8d64b93ebe","59":"009ee0451531276f598976f46848fe7d590262ca","55":"00a3259f00f8a9aa503caae2045970d2f7b22e13","69":"00237cf70206a5de77e5154ea72633514cdd4445","31":"006a8e78e4bb5c1570bf70b47b24c0b855a5b5b5","68":"00bbba1d86168727008d4c1542b39d45d93d693c","73":"006047d5cfe39157f2904d2533bad74b2ddd3170","47":"001a938f944fa33e899b81e3d0a909876587e7b0","28":"000fe0f2a4730347df688bd0d3c75f4494a28dca","34":"00af9b9350147b8c20498eb9cd65b63a3132c741","44":"6f7d6a970fde2a4243091aba720fc14ceec2854b","12":"b428ccf0f8cd5488a3af5d72b74e117dc71aa575","4":"0ac3201405a380e382377a71216b33cde892b161","3":"0abac62147275aa8199465764751eaa67c94d16c","21":"0a0ae9c18de23e72bb764e10ef542de693321542","13":"0ab8cc7e5cc3d48fcc786f9060da5a8882374f44","42":"0ad7d4c22ba4414fbe161f27f42c112c6cb83b29","48":"0abb6669aa25624d8371765c5afa6b80ae20f30b","60":"0a2c4708d3c853ea3c4b8630027afe9b788ee2ce","72":"0a946dc02260d0d4b36ef2087e60b415a5fff800","51":"0a130b596d1ce7bfe317d9e546bbeacc703fef65","53":"0a646e174268b493bd67f58fdf52fead02f74a96","20":"0ab8ebf80d94a1ba826857a9e81cea8c7124d86e","32":"0ac8a65af75e8223b07dcd98c6958db7af6504cf","41":"0a5af69c21e6c2d9b004c2f51939790b10b19814","58":"0a58ef8a37185d8abcbd6e1bad7eaf7e3d3d6016","65":"0a4a721fb8f0996350edd4fb224d89ce213f7f93","25":"0ad8980cb8eb0693647f411732b2165b6a0fce0e","23":"0a458b5f2eeebeb0e4e55e1d1a17988ec87b7123","24":"0ac7f92ee7225e47dbdc25f6d60a10b116b0813b","15":"0a3eb2074380f4abdec94d4a6171a099c9ecb30a","18":"0a2c3a235656a97d76f731b269982f92de9b37fd","38":"0a2e1f340255f62a617974d778714e5fdd28a007","8":"0adeaf7a9c16772b66815cce19917ef0460affe8","36":"0a74297fb11027ba2a958da5ee31980b8876e1d4","43":"b3603cef0816d0e115adeafa4eee65c056dc7a26","1":"0fd347fb29c23cad30d42852d7aa4ed906102b8a","22":"0cd142efcf69ba63dc62760ecd72fb4f1e930115","10":"0c710ee221d7567cc0f1a06fba8231ae8261a181","70":"0c5264c980964b88ae8a7c2c18d5a61daff481b1","2":"0c7147c05a270b9b2744576b0bfb69c8391ee1e4","35":"0c429f98b79c9522a11d51fbfae484004f899422","9":"0c27147781fc9c64cbcf45acc1575a0bf8070841","52":"0c450e6f9c256e33ef452c98dd20917fb6484317","14":"0c9cbed1e5d755a9666db36f742004c14bf780bd","11":"0cd1f1670176b03cc3d61935d9a6882c9508e33a","27":"0c882a0621189d18ff1350e3bed4114868663acf","7":"0c5ffa8e2b3126eba02901c37b31e8faf3b5377c","37":"0c9c74b6f48facd507c4e41d9df797a2017634e7","40":"0c13902f8200732555ad1603e954a726d4d24d85","62":"0c9cf664171d7e10527033cda1551694141207ed","33":"0c0b4fd84c8f4e075436d7ec34bfb3fad5e610be","17":"0c2fc1da358bcddfb4baf41b5dfd7285a13b766a","63":"0c5ef0e6b20d6e34ae388d640797f032a15df918","26":"0c5e41fdc8fba8e90b48cbe4752dc2c4a2805f21"},"composition":{"0":"Hf","56":"Hf(ZnN2)3","57":"Hf(ZnN2)3","29":"Hf(ZnN3)2","39":"Hf2Zn4N","49":"Hf2Zn4N9","5":"Hf2Zn4N9","19":"Hf2ZnN4","45":"Hf2ZnN5","6":"Hf2ZnN9","16":"Hf3ZnN13","50":"Hf3ZnN4","30":"Hf5(ZnN8)2","64":"Hf5ZnN3","59":"Hf6Zn2N13","55":"Hf7Zn5N19","69":"HfZn2N7","31":"HfZn3N2","68":"HfZn3N4","73":"HfZnN","47":"HfZnN12","28":"HfZnN2","34":"HfZnN2","44":"N2","12":"Ti","4":"Ti(ZnN2)2","3":"Ti(ZnN2)2","21":"Ti2Zn2N5","13":"Ti2Zn3N4","42":"Ti2Zn3N7","48":"Ti2ZnN3","60":"Ti2ZnN5","72":"Ti3ZnN5","51":"Ti3ZnN8","53":"Ti4(ZnN3)3","20":"Ti4Zn3N8","32":"Ti4ZnN7","41":"Ti5(ZnN3)3","58":"Ti6ZnN8","65":"Ti7(ZnN)3","25":"Ti7ZnN12","23":"TiZn2N3","24":"TiZn2N3","15":"TiZn2N5","18":"TiZnN","38":"TiZnN2","8":"TiZnN3","36":"TiZnN4","43":"Zn","1":"Zr","22":"Zr(ZnN)2","10":"Zr(ZnN)6","70":"Zr(ZnN2)2","2":"Zr(ZnN3)2","35":"Zr(ZnN5)2","9":"Zr2Zn2N3","52":"Zr2Zn3N4","14":"Zr2ZnN5","11":"Zr3ZnN6","27":"Zr4ZnN5","7":"Zr6Zn4N13","37":"ZrZn2N3","40":"ZrZn3N2","62":"ZrZnN2","33":"ZrZnN3","17":"ZrZnN3","63":"ZrZnN3","26":"ZrZnN3"},"E_f":{"0":0.0,"56":0.632228635,"57":0.870833935,"29":0.1256185167,"39":0.2936619536,"49":-0.0370197883,"5":0.561953045,"19":-0.6007983286,"45":-0.0922818656,"6":0.0288602979,"16":-0.0899045838,"50":-1.02825885,"30":-0.0069458522,"64":-0.3175585194,"59":-0.2216884393,"55":0.3828095202,"69":0.1671952525,"31":0.9949698083,"68":0.1143060125,"73":-0.369611975,"47":0.8577765143,"28":-0.6694122625,"34":-0.3108887625,"44":0.0,"12":0.0,"4":0.4436387,"3":0.4993669143,"21":-0.4770085806,"13":-0.4294422111,"42":0.6236076854,"48":-0.8424399458,"60":-0.0493847406,"72":-0.701213825,"51":-0.2382116083,"53":-0.3996681891,"20":-0.2971007933,"32":-0.5551503479,"41":-0.2279864721,"58":-1.1345180867,"65":-0.4719702519,"25":-0.34730284,"23":-0.0429733292,"24":0.5085712542,"15":0.0205995969,"18":-0.6217663083,"38":2.0046756125,"8":-0.014901635,"36":1.1665261167,"43":0.0,"1":0.0,"22":-0.23095297,"10":0.0001669577,"70":0.7521056286,"2":0.4464389611,"35":0.4785359346,"9":-0.5270690679,"52":-0.3812128222,"14":-0.5414344906,"11":-0.739542305,"27":-0.9191486925,"7":-0.2124962533,"37":0.1968950042,"40":-0.1157231917,"62":-0.2964831375,"33":-0.164177935,"17":0.232577665,"63":0.750659065,"26":0.774344365},"wyckoff":{"0":"A_hP2_194_c:Hf","56":"AB6C3_hR30_160_a_2b_b:Hf-N-Zn","57":"AB6C3_hR30_148_a_f_bc:Hf-N-Zn","29":"AB6C2_mC18_12_a_ij_i:Hf-N-Zn","39":"A2BC4_cF112_227_e_c_df:Hf-N-Zn","49":"A2B9C4_oP60_60_d_c4d_2d:Hf-N-Zn","5":"A2B9C4_hP30_176_f_hi_bh:Hf-N-Zn","19":"A2B4C_oP28_61_c_2c_a:Hf-N-Zn","45":"A2B5C_oP16_31_2a_5a_a:Hf-N-Zn","6":"A2B9C_oP48_62_d_c4d_c:Hf-N-Zn","16":"A3B13C_mP34_13_fg_e6g_a:Hf-N-Zn","50":"A3B4C_mP16_6_3a3b_3a5b_2a:Hf-N-Zn","30":"A5B16C2_oC92_68_agh_4i_h:Hf-N-Zn","64":"A5B3C_tP18_125_am_cg_d:Hf-N-Zn","59":"A6B13C2_mC42_12_3i_a6i_i:Hf-N-Zn","55":"A7B19C5_oP31_47_ek2l_ai2j3x_cij:Hf-N-Zn","69":"AB7C2_mP20_11_e_3e2f_f:Hf-N-Zn","31":"AB2C3_tI12_139_a_e_be:Hf-N-Zn","68":"AB4C3_cP16_223_a_e_c:Hf-N-Zn","73":"ABC_hP6_194_a_b_c:Hf-N-Zn","47":"AB12C_mC56_15_e_6f_e:Hf-N-Zn","28":"AB2C_hP8_194_c_f_a:Hf-N-Zn","34":"AB2C_mC16_12_i_2i_g:Hf-N-Zn","44":"A_cP8_205_c:N","12":"A_hP2_194_c:Ti","4":"A4BC2_mC28_5_4c_c_abc:N-Ti-Zn","3":"A4BC2_oP28_62_2cd_c_ac:N-Ti-Zn","21":"A5B2C2_oI36_46_b2c_ab_c:N-Ti-Zn","13":"A4B2C3_mP36_14_4e_2e_3e:N-Ti-Zn","42":"A7B2C3_tI24_139_aeg_e_be:N-Ti-Zn","48":"A3B2C_mC12_12_ai_i_b:N-Ti-Zn","60":"A5B2C_oP32_58_3gh_eg_g:N-Ti-Zn","72":"A5B3C_tP36_76_5a_3a_a:N-Ti-Zn","51":"A8B3C_oI48_72_2jk_aj_b:N-Ti-Zn","53":"A9B4C3_hR48_146_3b_4a_3a:N-Ti-Zn","20":"A8B4C3_mC60_12_8i_4i_3i:N-Ti-Zn","32":"A7B4C_mC48_15_e3f_2f_e:N-Ti-Zn","41":"A9B5C3_hP17_157_cd_bc_c:N-Ti-Zn","58":"A8B6C_hR45_148_cf_f_a:N-Ti-Zn","65":"A3B7C3_oC52_36_3a_7a_3a:N-Ti-Zn","25":"A12B7C_cI40_204_g_bc_a:N-Ti-Zn","23":"A3BC2_oC48_64_e2f_f_2f:N-Ti-Zn","24":"A3BC2_oC24_63_cg_c_e:N-Ti-Zn","15":"A5BC2_oC32_63_c2f_c_f:N-Ti-Zn","18":"ABC_hP6_164_d_c_d:N-Ti-Zn","38":"A2BC_cF32_227_c_b_a:N-Ti-Zn","8":"A3BC_cP40_198_2b_2a_2a:N-Ti-Zn","36":"A4BC_oC24_63_fg_a_c:N-Ti-Zn","43":"A_hP2_194_c:Zn","1":"A_hP2_194_c:Zr","22":"A2B2C_mC20_12_2i_2i_i:N-Zn-Zr","10":"A6B6C_mC26_12_3i_3i_a:N-Zn-Zr","70":"A4B2C_hP14_186_bc_ab_b:N-Zn-Zr","2":"A6B2C_hP9_162_k_c_b:N-Zn-Zr","35":"A10B2C_mP26_11_2e4f_f_e:N-Zn-Zr","9":"A3B2C2_mP14_14_ae_e_e:N-Zn-Zr","52":"A4B3C2_mC36_15_2f_ef_f:N-Zn-Zr","14":"A5BC2_mC32_9_5a_a_2a:N-Zn-Zr","11":"A6BC3_mP20_11_6e_e_3e:N-Zn-Zr","27":"A5BC4_oP20_59_a2e_a_2be:N-Zn-Zr","7":"A13B4C6_cI46_217_ag_c_d:N-Zn-Zr","37":"A3B2C_oC24_63_cf_2c_c:N-Zn-Zr","40":"A2B3C_oI24_72_j_ce_b:N-Zn-Zr","62":"A2BC_oP4_47_k_a_d:N-Zn-Zr","33":"A3BC_hP30_185_ab2c_ab_c:N-Zn-Zr","17":"A3BC_mC20_15_ef_c_e:N-Zn-Zr","63":"A3BC_cP5_221_c_b_a:N-Zn-Zr","26":"A3BC_tI20_140_bh_d_c:N-Zn-Zr"},"structure":{"0":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.771359,-1.600045,0.0],[0.0,3.20009,0.0],[0.0,0.0,5.055614]],"pbc":[true,true,true],"a":3.200089797,"b":3.20009,"c":5.055614,"alpha":90.0,"beta":90.0,"gamma":120.0000020984,"volume":44.8362093331},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.33333333,0.66666667,0.75],"xyz":[0.9237863241,1.600045016,3.7917105],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.66666667,0.33333333,0.25],"xyz":[1.8475726759,-0.000000016,1.2639035],"label":"Hf","properties":{}}]},"56":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.062902,0.0,1.294977],[-3.031451,5.250627,1.294978],[-3.031451,-5.250627,1.294978]],"pbc":[true,true,true],"a":6.1996569334,"b":6.199657013,"c":6.199657013,"alpha":115.7569392378,"beta":115.7569443894,"gamma":115.7569443894,"volume":123.6731006297},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.07941259,0.07941259,0.07941259],"xyz":[0.0,0.0,0.3085125915],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97170032,0.35461423,0.97170032],"xyz":[1.8706662446,-3.2400888855,2.9758777286],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97170032,0.97170032,0.35461423],"xyz":[1.8706662446,3.2400888855,2.9758777286],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.35461423,0.97170033,0.97170033],"xyz":[-3.7413325499,0.0,2.9758783716],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62831402,0.48486499,0.62831402],"xyz":[0.4348587054,-0.75319735,2.2551945327],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62831402,0.62831402,0.48486499],"xyz":[0.4348587054,0.75319735,2.2551945327],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48486498,0.62831401,0.62831401],"xyz":[-0.8697174109,0.0,2.2551946373],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.43962517,0.92332917,0.43962517],"xyz":[-1.4663249745,2.5397492824,2.3343003691],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.43962517,0.43962517,0.92332917],"xyz":[-1.4663249745,-2.5397492824,2.3343003691],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.92332917,0.43962517,0.43962517],"xyz":[2.932649949,0.0,2.3342998854],"label":"Zn","properties":{}}]},"57":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.062449,0.0,4.98739],[-1.531224,2.652158,4.98739],[-1.531224,-2.652158,4.98739]],"pbc":[true,true,true],"a":5.8525766026,"b":5.8525761855,"c":5.8525761855,"alpha":53.8933160047,"beta":53.8933195811,"gamma":53.8933195811,"volume":121.5242070062},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[0.0000005,0.0,7.481085],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.30592519,0.30592519,0.30592519],"xyz":[0.0000003059,0.0,4.5773047001],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.69407481,0.69407481,0.69407481],"xyz":[0.0000006941,0.0,10.3848652999],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.60495542,0.89911462,0.27504484],"xyz":[0.054743976,1.6551316596,8.8731397614],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.10088538,0.72495516,0.39504458],"xyz":[-1.4060141508,0.874974984,6.0890302386],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.72495516,0.39504458,0.10088538],"xyz":[1.4607583477,0.7801566756,6.0890302386],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.27504484,0.60495542,0.89911462],"xyz":[-1.4607573477,-0.7801566756,8.8731397614],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.89911462,0.27504484,0.60495542],"xyz":[1.4060151508,-0.874974984,8.8731397614],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.39504458,0.10088538,0.72495516],"xyz":[-0.054742976,-1.6551316596,6.0890302386],"label":"N","properties":{}}]},"29":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.517271,0.0,-1.602318],[0.0,5.261389,0.0],[-2.700464,0.0,6.804575]],"pbc":[true,true,true],"a":6.7113518952,"b":5.261389,"c":7.3208433084,"alpha":90.0,"beta":125.4587749812,"gamma":90.0,"volume":210.5621412159},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.53948074,0.0,0.19307466],"xyz":[2.9945510132,0.0,0.4493713042],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.46051926,0.0,0.80692534],"xyz":[0.8222559868,0.0,4.7528856958],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.03938539,0.5,0.69311581],"xyz":[-1.6150490327,2.6306945,4.6532505935],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.96061461,0.5,0.30688419],"xyz":[5.4318560327,2.6306945,0.5490064065],"label":"Zn","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[1.9084035,2.6306945,2.6011285],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.19037601,0.0,0.37098077],"xyz":[0.238911835,0.0,2.2193235654],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.80962399,0.0,0.62901923],"xyz":[3.577895165,0.0,2.9829334346],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.69031429,0.5,0.87094031],"xyz":[2.1470223498,2.6306945,4.8202756474],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.30968571,0.5,0.12905969],"xyz":[1.6697846502,2.6306945,0.3819813526],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24131655,0.28439444,0.00896358],"xyz":[1.548519528,1.4963097783,-0.3256724994],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75868345,0.28439444,0.99103642],"xyz":[2.268287472,1.4963097783,5.5279294994],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75868345,0.71560556,0.99103642],"xyz":[2.268287472,3.7650792217,5.5279294994],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24131655,0.71560556,0.00896358],"xyz":[1.548519528,3.7650792217,-0.3256724994],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.74128896,0.78441677,0.50890356],"xyz":[3.4569052984,4.1271217651,2.275091798],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25871104,0.78441677,0.49109644],"xyz":[0.3599017016,4.1271217651,2.927165202],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25871104,0.21558323,0.49109644],"xyz":[0.3599017016,1.1342672349,2.927165202],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.74128896,0.21558323,0.50890356],"xyz":[3.4569052984,1.1342672349,2.275091798],"label":"N","properties":{}}]},"39":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[-6.116632,-6.116632,0.0],[-6.116632,0.0,-6.116632],[0.0,-6.116632,-6.116632]],"pbc":[true,true,true],"a":8.6502239304,"b":8.6502239304,"c":8.6502239304,"alpha":60.0,"beta":60.0,"gamma":60.0,"volume":457.6853939389},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.0],"xyz":[-3.058316,0.0,-3.058316],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.0],"xyz":[-3.058316,-3.058316,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[0.0,-3.058316,-3.058316],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5723017,0.5723017,0.1776983],"xyz":[-7.0011177837,-4.587474,-4.587474],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.4276983,0.8223017,0.8223017],"xyz":[-7.64579,-7.64579,-10.0594337837],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.8223017,0.8223017,0.4276983],"xyz":[-10.0594337837,-7.64579,-7.64579],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.1776983,0.5723017,0.5723017],"xyz":[-4.587474,-4.587474,-7.0011177837],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5723017,0.1776983,0.1776983],"xyz":[-4.587474,-4.587474,-2.1738302163],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.4276983,0.4276983,0.8223017],"xyz":[-5.2321462163,-7.64579,-7.64579],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.1776983,0.1776983,0.5723017],"xyz":[-2.1738302163,-4.587474,-4.587474],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5723017,0.1776983,0.5723017],"xyz":[-4.587474,-7.0011177837,-4.587474],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.4276983,0.8223017,0.4276983],"xyz":[-7.64579,-5.2321462163,-7.64579],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.8223017,0.4276983,0.8223017],"xyz":[-7.64579,-10.0594337837,-7.64579],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.1776983,0.5723017,0.1776983],"xyz":[-4.587474,-2.1738302163,-4.587474],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.8223017,0.4276983,0.4276983],"xyz":[-7.64579,-7.64579,-5.2321462163],"label":"Zn","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.78788573,0.78788573,0.78788573],"xyz":[-9.6384141369,-9.6384141369,-9.6384141369],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.21211427,0.8636572,0.21211427],"xyz":[-6.5800981981,-2.5948498631,-6.5800981981],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.8636572,0.21211427,0.21211427],"xyz":[-6.5800981981,-6.5800981981,-2.5948498631],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.1363428,0.78788573,0.78788573],"xyz":[-5.6531658019,-5.6531658019,-9.6384141369],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.78788573,0.1363428,0.78788573],"xyz":[-5.6531658019,-9.6384141369,-5.6531658019],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.21211427,0.21211427,0.8636572],"xyz":[-2.5948498631,-6.5800981981,-6.5800981981],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.21211427,0.21211427,0.21211427],"xyz":[-2.5948498631,-2.5948498631,-2.5948498631],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.78788573,0.78788573,0.1363428],"xyz":[-9.6384141369,-5.6531658019,-5.6531658019],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[-6.116632,-6.116632,-6.116632],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[-3.058316,-6.116632,-3.058316],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[-3.058316,-3.058316,-6.116632],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[-6.116632,-3.058316,-3.058316],"label":"N","properties":{}}]},"49":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[19.735812,0.0,0.0],[0.0,6.101939,0.0],[0.0,0.0,5.570787]],"pbc":[true,true,true],"a":19.735812,"b":6.101939,"c":5.570787,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":670.8716114622},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.43941653,0.35413699,0.14372104],"xyz":[8.6722420258,2.1609223106,0.8006393013],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.56058347,0.35413699,0.35627896],"xyz":[11.0635699742,2.1609223106,1.9847541987],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.06058347,0.14586301,0.64372104],"xyz":[1.1956639742,0.8900471894,3.5860328013],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.56058347,0.64586301,0.85627896],"xyz":[11.0635699742,3.9410166894,4.7701476987],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.06058347,0.85413699,0.14372104],"xyz":[1.1956639742,5.2118918106,0.8006393013],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.43941653,0.64586301,0.64372104],"xyz":[8.6722420258,3.9410166894,3.5860328013],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.93941653,0.85413699,0.35627896],"xyz":[18.5401480258,5.2118918106,1.9847541987],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.93941653,0.14586301,0.85627896],"xyz":[18.5401480258,0.8900471894,4.7701476987],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.2871622,0.40737164,0.21147903],"xyz":[5.6673791927,2.4857568976,1.1781046311],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.7128378,0.40737164,0.28852097],"xyz":[14.0684328073,2.4857568976,1.6072888689],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.2128378,0.09262836,0.71147903],"xyz":[4.2005268073,0.5652126024,3.9634981311],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.7128378,0.59262836,0.78852097],"xyz":[14.0684328073,3.6161821024,4.3926823689],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.2128378,0.90737164,0.21147903],"xyz":[4.2005268073,5.5367263976,1.1781046311],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.2871622,0.59262836,0.71147903],"xyz":[5.6673791927,3.6161821024,3.9634981311],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.7871622,0.90737164,0.28852097],"xyz":[15.5352851927,5.5367263976,1.6072888689],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.7871622,0.09262836,0.78852097],"xyz":[15.5352851927,0.5652126024,4.3926823689],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.13213508,0.25],"xyz":[0.0,0.8062801979,1.39269675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.36786492,0.75],"xyz":[9.867906,2.2446893021,4.17809025],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.86786492,0.75],"xyz":[0.0,5.2956588021,4.17809025],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.63213508,0.25],"xyz":[9.867906,3.8572496979,1.39269675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2816148,0.9097524,0.50653017],"xyz":[5.5578967492,5.5512536499,2.8217716861],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7183852,0.9097524,0.99346983],"xyz":[14.1779152508,5.5512536499,5.5344088139],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2183852,0.5902476,0.00653017],"xyz":[4.3100092508,3.6016548501,0.0363781861],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7183852,0.0902476,0.49346983],"xyz":[14.1779152508,0.5506853501,2.7490153139],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2183852,0.4097524,0.50653017],"xyz":[4.3100092508,2.5002841499,2.8217716861],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2816148,0.0902476,0.00653017],"xyz":[5.5578967492,0.5506853501,0.0363781861],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7816148,0.4097524,0.99346983],"xyz":[15.4258027492,2.5002841499,5.5344088139],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7816148,0.5902476,0.49346983],"xyz":[15.4258027492,3.6016548501,2.7490153139],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.46760771,0.05450945,0.24347796],"xyz":[9.2286178543,0.3326133388,1.3563638544],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.53239229,0.05450945,0.25652204],"xyz":[10.5071941457,0.3326133388,1.4290296456],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.03239229,0.44549055,0.74347796],"xyz":[0.6392881457,2.7183561612,4.1417573544],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.53239229,0.94549055,0.75652204],"xyz":[10.5071941457,5.7693256612,4.2144231456],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.03239229,0.55450945,0.24347796],"xyz":[0.6392881457,3.3835828388,1.3563638544],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.46760771,0.94549055,0.74347796],"xyz":[9.2286178543,5.7693256612,4.1417573544],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.96760771,0.55450945,0.25652204],"xyz":[19.0965238543,3.3835828388,1.4290296456],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.96760771,0.44549055,0.75652204],"xyz":[19.0965238543,2.7183561612,4.2144231456],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3444681,0.04626765,0.98351114],"xyz":[6.7983576616,0.282322378,5.4789310731],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6555319,0.04626765,0.51648886],"xyz":[12.9374543384,0.282322378,2.8772494269],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.1555319,0.45373235,0.48351114],"xyz":[3.0695483384,2.768647122,2.6935375731],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6555319,0.95373235,0.01648886],"xyz":[12.9374543384,5.819616622,0.0918559269],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.1555319,0.54626765,0.98351114],"xyz":[3.0695483384,3.333291878,5.4789310731],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3444681,0.95373235,0.48351114],"xyz":[6.7983576616,5.819616622,2.6935375731],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.8444681,0.54626765,0.51648886],"xyz":[16.6662636616,3.333291878,2.8772494269],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.8444681,0.45373235,0.01648886],"xyz":[16.6662636616,2.768647122,0.0918559269],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37061771,0.46850177,0.41085414],"xyz":[7.3144414484,2.8587692219,2.288780902],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62938229,0.46850177,0.08914586],"xyz":[12.4213705516,2.8587692219,0.496612598],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12938229,0.03149823,0.91085414],"xyz":[2.5534645516,0.1922002781,5.074174402],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62938229,0.53149823,0.58914586],"xyz":[12.4213705516,3.2431697781,3.282006098],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12938229,0.96850177,0.41085414],"xyz":[2.5534645516,5.9097387219,2.288780902],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37061771,0.53149823,0.91085414],"xyz":[7.3144414484,3.2431697781,5.074174402],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87061771,0.96850177,0.08914586],"xyz":[17.1823474484,5.9097387219,0.496612598],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87061771,0.03149823,0.58914586],"xyz":[17.1823474484,0.1922002781,3.282006098],"label":"N","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.09968678,0.269465,0.18570777],"xyz":[1.967399549,1.6442589926,1.0345384309],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.90031322,0.269465,0.31429223],"xyz":[17.768412451,1.6442589926,1.7508550691],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.40031322,0.230535,0.68570777],"xyz":[7.900506451,1.4067105074,3.8199319309],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.90031322,0.730535,0.81429223],"xyz":[17.768412451,4.4576800074,4.5362485691],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.40031322,0.769465,0.18570777],"xyz":[7.900506451,4.6952284926,1.0345384309],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.09968678,0.730535,0.68570777],"xyz":[1.967399549,4.4576800074,3.8199319309],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.59968678,0.769465,0.31429223],"xyz":[11.835305549,4.6952284926,1.7508550691],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.59968678,0.230535,0.81429223],"xyz":[11.835305549,1.4067105074,4.5362485691],"label":"Hf","properties":{}}]},"5":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.37068,-3.100763,0.0],[0.0,6.201526,0.0],[0.0,0.0,10.101875]],"pbc":[true,true,true],"a":6.2015268156,"b":6.201526,"c":10.101875,"alpha":90.0,"beta":90.0,"gamma":119.9999956495,"volume":336.4572072644},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.33333333,0.66666667,0.07050127],"xyz":[1.7902266488,3.100763031,0.7121950169],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.66666667,0.33333333,0.57050127],"xyz":[3.5804533512,-0.000000031,5.7631325169],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.33333333,0.66666667,0.42949873],"xyz":[1.7902266488,3.100763031,4.3387424831],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.66666667,0.33333333,0.92949873],"xyz":[3.5804533512,-0.000000031,9.3896799831],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[0.0,0.0,5.0509375],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.34920449,0.19805089,0.25],"xyz":[1.8754655704,0.1454173816,2.52546875],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.19805089,0.8488464,0.75],"xyz":[1.0636679539,4.6500341478,7.57640625],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.8488464,0.65079551,0.25],"xyz":[4.5588823836,1.4038537661,2.52546875],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.1511536,0.34920449,0.75],"xyz":[0.8117976164,1.6969092339,7.57640625],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.80194911,0.1511536,0.25],"xyz":[4.3070120461,-1.5492711478,2.52546875],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.65079551,0.80194911,0.75],"xyz":[3.4952144296,2.9553456184,7.57640625],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.43067355,0.93955068,0.25],"xyz":[2.3130098215,4.4912313614,2.52546875],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.93955068,0.50887713,0.75],"xyz":[5.0460260461,0.2424907673,7.57640625],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.50887713,0.56932645,0.25],"xyz":[2.7330162245,1.9527854059,2.52546875],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.49112287,0.43067355,0.75],"xyz":[2.6376637755,1.1479775941,7.57640625],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.06044932,0.49112287,0.25],"xyz":[0.3246539539,2.8582722327,2.52546875],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.56932645,0.06044932,0.75],"xyz":[3.0576701785,-1.3904683614,7.57640625],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.34135426,0.31478008,0.0755223],"xyz":[1.8333044971,0.8936581911,0.7629168343],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31478008,0.97342582,0.5755223],"xyz":[1.6905830801,5.0606671066,5.8138543343],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.34135426,0.31478008,0.4244777],"xyz":[1.8333044971,0.8936581911,4.2880206657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97342582,0.65864574,0.4244777],"xyz":[5.227958583,1.0662459155,4.2880206657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02657418,0.34135426,0.9244777],"xyz":[0.142721417,2.0345170845,9.3389581657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68521992,0.02657418,0.4244777],"xyz":[3.6800969199,-1.9599041066,4.2880206657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31478008,0.97342582,0.9244777],"xyz":[1.6905830801,5.0606671066,9.3389581657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.65864574,0.68521992,0.5755223],"xyz":[3.5373755029,2.2071048089,5.8138543343],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.65864574,0.68521992,0.9244777],"xyz":[3.5373755029,2.2071048089,9.3389581657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68521992,0.02657418,0.0755223],"xyz":[3.6800969199,-1.9599041066,0.7629168343],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97342582,0.65864574,0.0755223],"xyz":[5.227958583,1.0662459155,0.7629168343],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02657418,0.34135426,0.5755223],"xyz":[0.142721417,2.0345170845,5.8138543343],"label":"N","properties":{}}]},"19":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.306134,0.0,0.0],[0.0,5.45582,0.0],[0.0,0.0,11.449448]],"pbc":[true,true,true],"a":5.306134,"b":5.45582,"c":11.449448,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":331.4536423784},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.0007753,0.08033905,0.34704739],"xyz":[0.0041138457,0.4383153958,3.9735010453],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.4992247,0.91966095,0.84704739],"xyz":[2.6489531543,5.0175046042,9.6982250453],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.9992247,0.91966095,0.65295261],"xyz":[5.3020201543,5.0175046042,7.4759469547],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.4992247,0.58033905,0.34704739],"xyz":[2.6489531543,3.1662253958,3.9735010453],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.0007753,0.41966095,0.84704739],"xyz":[0.0041138457,2.2895946042,9.6982250453],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5007753,0.08033905,0.15295261],"xyz":[2.6571808457,0.4383153958,1.7512229547],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5007753,0.41966095,0.65295261],"xyz":[2.6571808457,2.2895946042,7.4759469547],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.9992247,0.58033905,0.15295261],"xyz":[5.3020201543,3.1662253958,1.7512229547],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[2.653067,0.0,5.724724],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[2.653067,2.72791,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[0.0,2.72791,5.724724],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.19703661,0.30428541,0.05279103],"xyz":[1.0455026556,1.6601264256,0.6044281529],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.30296339,0.69571459,0.55279103],"xyz":[1.6075643444,3.7956935744,6.3291521529],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.80296339,0.69571459,0.94720897],"xyz":[4.2606313444,3.7956935744,10.8450198471],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.30296339,0.80428541,0.05279103],"xyz":[1.6075643444,4.3880364256,0.6044281529],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.19703661,0.19571459,0.55279103],"xyz":[1.0455026556,1.0677835744,6.3291521529],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.69703661,0.30428541,0.44720897],"xyz":[3.6985696556,1.6601264256,5.1202958471],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.69703661,0.19571459,0.94720897],"xyz":[3.6985696556,1.0677835744,10.8450198471],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.80296339,0.80428541,0.44720897],"xyz":[4.2606313444,4.3880364256,5.1202958471],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.86819053,0.95152275,0.18764705],"xyz":[4.6067352897,5.1913368499,2.1484551413],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63180947,0.04847725,0.68764705],"xyz":[3.3524657103,0.2644831501,7.8731791413],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.13180947,0.04847725,0.81235295],"xyz":[0.6993987103,0.2644831501,9.3009928587],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63180947,0.45152275,0.18764705],"xyz":[3.3524657103,2.4634268499,2.1484551413],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.86819053,0.54847725,0.68764705],"xyz":[4.6067352897,2.9923931501,7.8731791413],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36819053,0.95152275,0.31235295],"xyz":[1.9536682897,5.1913368499,3.5762688587],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36819053,0.54847725,0.81235295],"xyz":[1.9536682897,2.9923931501,9.3009928587],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.13180947,0.45152275,0.31235295],"xyz":[0.6993987103,2.4634268499,3.5762688587],"label":"N","properties":{}}]},"45":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[12.156346,0.0,0.0],[0.0,4.319613,0.0],[0.0,0.0,4.222262]],"pbc":[true,true,true],"a":12.156346,"b":4.319613,"c":4.222262,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":221.71397633},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.58531349,0.5,0.16750956],"xyz":[7.1152733029,2.1598065,0.7072692498],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.08531349,0.0,0.83249044],"xyz":[1.0371003029,0.0,3.5149927502],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.40614012,0.0,0.0412382],"xyz":[4.9371798232,0.0,0.1741184848],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.90614012,0.5,0.9587618],"xyz":[11.0153528232,2.1598065,4.0481435152],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.64872327,0.5,0.6371845],"xyz":[7.8861045284,2.1598065,2.6903599013],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14872327,0.0,0.3628155],"xyz":[1.8079315284,0.0,1.5319020987],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.39480052,0.0,0.54485042],"xyz":[4.7993317221,0.0,2.3005012241],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.89480052,0.5,0.45514958],"xyz":[10.8775047221,2.1598065,1.9217607759],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.42143717,0.5,0.07644136],"xyz":[5.1231360558,2.1598065,0.3227554496],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92143717,0.0,0.92355864],"xyz":[11.2013090558,0.0,3.8995065504],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58993952,0.0,0.09266172],"xyz":[7.1715089242,0.0,0.3912420592],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.08993952,0.5,0.90733828],"xyz":[1.0933359242,2.1598065,3.8310199408],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.23293583,0.0,0.16108981],"xyz":[2.8316485453,0.0,0.6801633834],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.73293583,0.5,0.83891019],"xyz":[8.9098215453,2.1598065,3.5420986166],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.19201007,0.5,0.28261666],"xyz":[2.3341408464,2.1598065,1.1932815841],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.69201007,0.0,0.71738334],"xyz":[8.4123138464,0.0,3.0289804159],"label":"Zn","properties":{}}]},"6":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.729996,0.0,0.0],[0.0,9.412429,0.0],[0.0,0.0,8.919448]],"pbc":[true,true,true],"a":6.729996,"b":9.412429,"c":8.919448,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":565.0078701445},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.25298222,0.45025421,0.31557996],"xyz":[1.7025693287,4.2379857836,2.8147990431],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.24701778,0.95025421,0.81557996],"xyz":[1.6624286713,8.9442002836,7.2745230431],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.24701778,0.54974579,0.81557996],"xyz":[1.6624286713,5.1744432164,7.2745230431],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.74701778,0.95025421,0.68442004],"xyz":[5.0274266713,8.9442002836,6.1046489569],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.74701778,0.54974579,0.68442004],"xyz":[5.0274266713,5.1744432164,6.1046489569],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75298222,0.04974579,0.18442004],"xyz":[5.0675673287,0.4682287164,1.6449249569],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75298222,0.45025421,0.18442004],"xyz":[5.0675673287,4.2379857836,1.6449249569],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25298222,0.04974579,0.31557996],"xyz":[1.7025693287,0.4682287164,2.8147990431],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.59697916,0.25,0.82686578],"xyz":[4.0176673589,2.35310725,7.3751863277],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.90302084,0.75,0.32686578],"xyz":[6.0773266411,7.05932175,2.9154623277],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.40302084,0.75,0.17313422],"xyz":[2.7123286411,7.05932175,1.5442616723],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.09697916,0.25,0.67313422],"xyz":[0.6526693589,2.35310725,6.0039856723],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.01809884,0.57498929,0.15848322],"xyz":[0.1218051208,5.4120458679,1.4135828397],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48190116,0.07498929,0.65848322],"xyz":[3.2431928792,0.7058313679,5.8733068397],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48190116,0.42501071,0.65848322],"xyz":[3.2431928792,4.0003831321,5.8733068397],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.98190116,0.07498929,0.84151678],"xyz":[6.6081908792,0.7058313679,7.5058651603],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.98190116,0.42501071,0.84151678],"xyz":[6.6081908792,4.0003831321,7.5058651603],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51809884,0.92501071,0.34151678],"xyz":[3.4868031208,8.7065976321,3.0461411603],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51809884,0.57498929,0.34151678],"xyz":[3.4868031208,5.4120458679,3.0461411603],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.01809884,0.92501071,0.15848322],"xyz":[0.1218051208,8.7065976321,1.4135828397],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.38099059,0.11552545,0.96761734],"xyz":[2.5640651467,1.0873750958,8.630612548],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.11900941,0.61552545,0.46761734],"xyz":[0.8009328533,5.7935895958,4.170888548],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.11900941,0.88447455,0.46761734],"xyz":[0.8009328533,8.3250539042,4.170888548],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.61900941,0.61552545,0.03238266],"xyz":[4.1659308533,5.7935895958,0.288835452],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.61900941,0.88447455,0.03238266],"xyz":[4.1659308533,8.3250539042,0.288835452],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.88099059,0.38447455,0.53238266],"xyz":[5.9290631467,3.6188394042,4.748559452],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.88099059,0.11552545,0.53238266],"xyz":[5.9290631467,1.0873750958,4.748559452],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.38099059,0.38447455,0.96761734],"xyz":[2.5640651467,3.6188394042,8.630612548],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.18405523,0.59629476,0.09903596],"xyz":[1.2386909617,5.6125820916,0.8833460954],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31594477,0.09629476,0.59903596],"xyz":[2.1263070383,0.9063675916,5.3430700954],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31594477,0.40370524,0.59903596],"xyz":[2.1263070383,3.7998469084,5.3430700954],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.81594477,0.09629476,0.90096404],"xyz":[5.4913050383,0.9063675916,8.0361019046],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.81594477,0.40370524,0.90096404],"xyz":[5.4913050383,3.7998469084,8.0361019046],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68405523,0.90370524,0.40096404],"xyz":[4.6036889617,8.5060614084,3.5763779046],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68405523,0.59629476,0.40096404],"xyz":[4.6036889617,5.6125820916,3.5763779046],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.18405523,0.90370524,0.09903596],"xyz":[1.2386909617,8.5060614084,0.8833460954],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.94408897,0.3893453,0.40753579],"xyz":[6.3537149917,3.6646849927,3.634994287],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55591103,0.8893453,0.90753579],"xyz":[3.7412790083,8.3708994927,8.094718287],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55591103,0.6106547,0.90753579],"xyz":[3.7412790083,5.7477440073,8.094718287],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.05591103,0.8893453,0.59246421],"xyz":[0.3762810083,8.3708994927,5.284453713],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.05591103,0.6106547,0.59246421],"xyz":[0.3762810083,5.7477440073,5.284453713],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44408897,0.1106547,0.09246421],"xyz":[2.9887169917,1.0415295073,0.824729713],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44408897,0.3893453,0.09246421],"xyz":[2.9887169917,3.6646849927,0.824729713],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.94408897,0.1106547,0.40753579],"xyz":[6.3537149917,1.0415295073,3.634994287],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.32785766,0.25,0.33884582],"xyz":[2.2064807404,2.35310725,3.0223176715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17214234,0.75,0.83884582],"xyz":[1.1585172596,7.05932175,7.4820416715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.67214234,0.75,0.66115418],"xyz":[4.5235152596,7.05932175,5.8971303285],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82785766,0.25,0.16115418],"xyz":[5.5714787404,2.35310725,1.4374063285],"label":"N","properties":{}}]},"16":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[10.962471,0.0,0.122473],[0.0,3.175217,0.0],[-0.573407,0.0,9.709596]],"pbc":[true,true,true],"a":10.9631551144,"b":3.175217,"c":9.7265127395,"alpha":90.0,"beta":92.7396338238,"gamma":90.0,"volume":338.1967808169},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.0],"xyz":[5.4812355,0.0,0.0612365],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[5.194532,0.0,4.9160345],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6736032,0.18759091,0.93174711],"xyz":[6.8500852304,0.5956418465,9.129386217],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6736032,0.81240909,0.43174711],"xyz":[7.1367887304,2.5795751535,4.274588217],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3263968,0.81240909,0.06825289],"xyz":[3.5389787696,2.5795751535,0.702682783],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3263968,0.18759091,0.56825289],"xyz":[3.2522752696,0.5956418465,5.557480783],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75558845,0.23022353,0.03949303],"xyz":[8.2604708912,0.7310096663,0.4760005504],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75558845,0.76977647,0.53949303],"xyz":[7.9737673912,2.4442073337,5.3307985504],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24441155,0.76977647,0.96050697],"xyz":[2.1285931088,2.4442073337,9.3560684496],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24441155,0.23022353,0.46050697],"xyz":[2.4152966088,0.7310096663,4.5012704496],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12699532,0.2300208,0.47579975],"xyz":[1.1193556054,0.7303659545,4.6353768472],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12699532,0.7699792,0.97579975],"xyz":[0.8326521054,2.4448510455,9.4901748472],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87300468,0.7699792,0.52420025],"xyz":[9.2697083946,2.4448510455,5.1966921528],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87300468,0.2300208,0.02420025],"xyz":[9.5564118946,0.7303659545,0.3418941528],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07990668,0.20674338,0.60169736],"xyz":[0.5309571841,0.6564550948,5.8520246907],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07990668,0.79325662,0.10169736],"xyz":[0.8176606841,2.5187619052,0.9972266907],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92009332,0.79325662,0.39830264],"xyz":[9.8581068159,2.5187619052,3.9800443093],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92009332,0.20674338,0.89830264],"xyz":[9.5714033159,0.6564550948,8.8348423093],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14854564,0.29132038,0.73090146],"xyz":[1.2093232572,0.925005423,7.1149507226],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14854564,0.70867962,0.23090146],"xyz":[1.4960267572,2.250211577,2.2601527226],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85145436,0.70867962,0.26909854],"xyz":[9.1797407428,2.250211577,2.7171182774],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85145436,0.29132038,0.76909854],"xyz":[8.8930372428,0.925005423,7.5719162774],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41976842,0.75041369,0.33129433],"xyz":[4.4117326431,2.3827263055,3.2681443991],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41976842,0.24958631,0.83129433],"xyz":[4.1250291431,0.7924906945,8.1229423991],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58023158,0.24958631,0.66870567],"xyz":[5.9773313569,0.7924906945,6.5639246009],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58023158,0.75041369,0.16870567],"xyz":[6.2640348569,2.3827263055,1.7091266009],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.45635328,0.75],"xyz":[5.05118025,1.4490206927,7.3434335],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.54364672,0.25],"xyz":[5.33788375,1.7261963073,2.4886355],"label":"N","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.0,0.23886969,0.25],"xyz":[-0.14335175,0.7584631005,2.427399],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.0,0.76113031,0.75],"xyz":[-0.43005525,2.4167538995,7.282197],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.69243328,0.26495359,0.26261208],"xyz":[7.4401961465,0.8412851432,2.6346615826],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.69243328,0.73504641,0.76261208],"xyz":[7.1534926465,2.3339318568,7.4894595826],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.30756672,0.73504641,0.73738792],"xyz":[2.9488678535,2.3339318568,7.1974074174],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.30756672,0.26495359,0.23738792],"xyz":[3.2355713535,0.8412851432,2.3426094174],"label":"Hf","properties":{}}]},"50":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[8.083094,0.0,-0.208196],[0.0,3.746822,0.0],[0.280916,0.0,8.346883]],"pbc":[true,true,true],"a":8.0857748044,"b":3.746822,"c":8.351608804,"alpha":90.0,"beta":89.5478661301,"gamma":90.0,"volume":253.0121193585},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.11519925,0.5,0.14812181],"xyz":[0.9727761529,1.873411,1.2123713948],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.52623739,0.5,0.32004718],"xyz":[4.3435326633,1.873411,2.5618358463],"label":"Zn","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.07390019,0.5,0.78474769],"xyz":[0.8177903645,1.873411,6.534811429],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.44698331,0.5,0.97366906],"xyz":[3.8865273288,1.873411,8.0340415873],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.37200353,0.0,0.59577805],"xyz":[3.174303088,0.0,4.8954400304],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.971063,0.0,0.44002485],"xyz":[7.9728035297,0.0,3.4706645077],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.70070504,0.5,0.65161885],"xyz":[5.8469148655,1.873411,5.293102315],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.77589491,0.0,0.00494085],"xyz":[6.2730194555,0.0,-0.1202975198],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.50521321,0.0,0.05573442],"xyz":[4.0993425568,0.0,0.3600253133],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33683218,0.5,0.73258869],"xyz":[2.9284420576,1.873411,6.04470497],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.93708398,0.5,0.56442548],"xyz":[7.7330940444,1.873411,4.5160963075],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.70583489,0.5,0.89905921],"xyz":[5.9578898814,1.873411,7.3573900352],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99245769,0.0,0.84790603],"xyz":[8.2603191696,0.0,6.8707467062],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21380499,0.0,0.42136796],"xyz":[1.8465748337,0.0,3.4725957184],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.89843228,0.0,0.2119326],"xyz":[7.3216478301,0.0,1.5819266091],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62841745,0.0,0.58627726],"xyz":[5.2442519824,0.0,4.7627536954],"label":"N","properties":{}}]},"30":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.444884,-6.785908,0.0],[3.444884,6.785908,0.0],[0.0,0.0,12.043561]],"pbc":[true,true,true],"a":7.6102413338,"b":7.6102413338,"c":12.043561,"alpha":90.0,"beta":90.0,"gamma":126.170506369,"volume":563.0766033582},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.75,0.75,0.14314454],"xyz":[5.167326,0.0,1.7239699993],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25,0.25,0.35685546],"xyz":[1.722442,0.0,4.2978105007],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75,0.75,0.64314454],"xyz":[5.167326,0.0,7.7457504993],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25,0.25,0.85685546],"xyz":[1.722442,0.0,10.3195910007],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25,0.75,0.25],"xyz":[3.444884,3.392954,3.01089025],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75,0.25,0.75],"xyz":[3.444884,-3.392954,9.03267075],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75,0.25,0.02657995],"xyz":[3.444884,-3.392954,0.3201172492],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75,0.25,0.47342005],"xyz":[3.444884,-3.392954,5.7016632508],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25,0.75,0.52657995],"xyz":[3.444884,3.392954,6.3418977492],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25,0.75,0.97342005],"xyz":[3.444884,3.392954,11.7234437508],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25,0.25,0.10718944],"xyz":[1.722442,0.0,1.2909425592],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75,0.75,0.39281056],"xyz":[5.167326,0.0,4.7308379408],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25,0.25,0.60718944],"xyz":[1.722442,0.0,7.3127230592],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75,0.75,0.89281056],"xyz":[5.167326,0.0,10.7526184408],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.32171573,0.49040581,0.24334585],"xyz":[2.7976644992,1.1447153634,2.9307505886],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.50959419,0.67828427,0.25665415],"xyz":[4.0921035008,1.1447153634,3.0910299114],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00959419,0.17828427,0.74334585],"xyz":[0.6472195008,1.1447153634,8.9525310886],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17828427,0.00959419,0.24334585],"xyz":[0.6472195008,-1.1447153634,2.9307505886],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.67828427,0.50959419,0.75665415],"xyz":[4.0921035008,-1.1447153634,9.1128104114],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99040581,0.82171573,0.25665415],"xyz":[6.2425484992,-1.1447153634,3.0910299114],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.49040581,0.32171573,0.74334585],"xyz":[2.7976644992,-1.1447153634,8.9525310886],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82171573,0.99040581,0.75665415],"xyz":[6.2425484992,1.1447153634,9.1128104114],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02449093,0.58763465,0.10661258],"xyz":[2.1087016165,3.8214414747,1.2839951106],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41236535,0.97550907,0.39338742],"xyz":[4.7810663835,3.8214414747,4.7377853894],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.91236535,0.47550907,0.60661258],"xyz":[4.7810663835,-2.9644665253,7.3057756106],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.47550907,0.91236535,0.10661258],"xyz":[4.7810663835,2.9644665253,1.2839951106],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97550907,0.41236535,0.89338742],"xyz":[4.7810663835,-3.8214414747,10.7595658894],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.08763465,0.52449093,0.39338742],"xyz":[2.1087016165,2.9644665253,4.7377853894],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58763465,0.02449093,0.60661258],"xyz":[2.1087016165,-3.8214414747,7.3057756106],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.52449093,0.08763465,0.89338742],"xyz":[2.1087016165,-2.9644665253,10.7595658894],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92789297,0.09878444,0.102801],"xyz":[3.5367845829,-5.6262542066,1.2380901144],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.90121556,0.07210703,0.397199],"xyz":[3.3529834171,-5.6262542066,4.7836903856],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.40121556,0.57210703,0.602801],"xyz":[3.3529834171,1.1596537934,7.2598706144],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.57210703,0.40121556,0.102801],"xyz":[3.3529834171,-1.1596537934,1.2380901144],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07210703,0.90121556,0.897199],"xyz":[3.3529834171,5.6262542066,10.8054708856],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.59878444,0.42789297,0.397199],"xyz":[3.5367845829,-1.1596537934,4.7836903856],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.09878444,0.92789297,0.602801],"xyz":[3.5367845829,5.6262542066,7.2598706144],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.42789297,0.59878444,0.897199],"xyz":[3.5367845829,1.1596537934,10.8054708856],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28120306,0.47712413,0.97303318],"xyz":[2.6123492036,1.3295023563,11.7187844584],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.52287587,0.71879694,0.52696682],"xyz":[4.2774187964,1.3295023563,6.3465570416],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02287587,0.21879694,0.47303318],"xyz":[0.8325347964,1.3295023563,5.6970039584],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21879694,0.02287587,0.97303318],"xyz":[0.8325347964,-1.3295023563,11.7187844584],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71879694,0.52287587,0.02696682],"xyz":[4.2774187964,-1.3295023563,0.3247765416],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97712413,0.78120306,0.52696682],"xyz":[6.0572332036,-1.3295023563,6.3465570416],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.47712413,0.28120306,0.47303318],"xyz":[2.6123492036,-1.3295023563,5.6970039584],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.78120306,0.97712413,0.02696682],"xyz":[6.0572332036,1.3295023563,0.3247765416],"label":"N","properties":{}}]},"64":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.828845,0.0,0.0],[0.0,5.828845,0.0],[0.0,0.0,9.239161]],"pbc":[true,true,true],"a":5.828845,"b":5.828845,"c":9.239161,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":313.9045050852},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.75,0.25,0.5],"xyz":[4.37163375,1.45721125,4.6195805],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25,0.75,0.5],"xyz":[1.45721125,4.37163375,4.6195805],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.25,0.0],"xyz":[4.37163375,1.45721125,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.75,0.0],"xyz":[1.45721125,4.37163375,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.25,0.23728861],"xyz":[1.45721125,1.45721125,2.1923476713],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.25,0.76271139],"xyz":[1.45721125,1.45721125,7.0468133287],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.75,0.23728861],"xyz":[4.37163375,4.37163375,2.1923476713],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.75,0.76271139],"xyz":[4.37163375,4.37163375,7.0468133287],"label":"N","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25,0.25,0.0],"xyz":[1.45721125,1.45721125,0.0],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75,0.75,0.0],"xyz":[4.37163375,4.37163375,0.0],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.57763663,0.07763663,0.25057902],"xyz":[3.3669543826,0.4525318826,2.315139909],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.92236337,0.42236337,0.25057902],"xyz":[5.3763131174,2.4618906174,2.315139909],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.57763663,0.42236337,0.74942098],"xyz":[3.3669543826,2.4618906174,6.924021091],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.07763663,0.92236337,0.25057902],"xyz":[0.4525318826,5.3763131174,2.315139909],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.92236337,0.07763663,0.74942098],"xyz":[5.3763131174,0.4525318826,6.924021091],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.42236337,0.92236337,0.74942098],"xyz":[2.4618906174,5.3763131174,6.924021091],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.07763663,0.57763663,0.74942098],"xyz":[0.4525318826,3.3669543826,6.924021091],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.42236337,0.57763663,0.25057902],"xyz":[2.4618906174,3.3669543826,2.315139909],"label":"Hf","properties":{}}]},"59":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.835117,-2.032658,-0.515824],[6.835117,2.032658,-0.515824],[-3.147213,0.0,11.027458]],"pbc":[true,true,true],"a":7.1495872152,"b":7.1495872152,"c":11.4677713445,"alpha":109.3747833864,"beta":109.3747833864,"gamma":33.0345290025,"volume":299.8193219994},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.34297942,0.34297942,0.99965321],"xyz":[1.5424873506,0.0,10.6697997552],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.65702058,0.65702058,0.00034679],"xyz":[8.9805336494,0.0,-0.6739897552],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.39485957,0.39485957,0.38058576],"xyz":[4.2000382676,0.0,3.7895373981],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.60514043,0.60514043,0.61941424],"xyz":[6.3229827324,0.0,6.2062726019],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.69607843,0.69607843,0.38139415],"xyz":[8.3152263934,0.0,3.4877000504],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.30392157,0.30392157,0.61860585],"xyz":[2.2077946066,0.0,6.5081099496],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.19897726,0.19897726,0.04469716],"xyz":[2.5793942219,0.0,0.2876215623],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.80102274,0.80102274,0.95530284],"xyz":[7.9436267781,0.0,9.7081884377],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.84879528,0.84879528,0.34182287],"xyz":[10.5274407155,0.0,2.8937793893],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.15120472,0.15120472,0.65817713],"xyz":[-0.0044197155,0.0,7.1020306107],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.23924638,0.23924638,0.40916785],"xyz":[1.9828156216,0.0,4.2652632314],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.76075362,0.76075362,0.59083215],"xyz":[8.5402053784,0.0,5.7305467686],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[6.835117,0.0,-0.515824],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.39982928,0.39982928,0.19561494],"xyz":[4.8501179355,0.0,1.744652458],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.60017072,0.60017072,0.80438506],"xyz":[5.6729030645,0.0,8.251157542],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62078394,0.62078394,0.18012629],"xyz":[7.9193659217,0.0,1.3459045875],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37921606,0.37921606,0.81987371],"xyz":[2.6036550783,0.0,8.6499054125],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55627083,0.55627083,0.41837015],"xyz":[6.2876524386,0.0,4.0396835684],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44372917,0.44372917,0.58162985],"xyz":[4.2353685614,0.0,5.9561264316],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.11671079,0.11671079,0.16606411],"xyz":[1.0728246838,0.0,1.7108605453],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.88328921,0.88328921,0.83393589],"xyz":[9.4501963162,0.0,8.2849494547],"label":"Zn","properties":{}}]},"55":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.184151,0.0,0.0],[0.0,7.172117,0.0],[0.0,0.0,25.251255]],"pbc":[true,true,true],"a":4.184151,"b":7.172117,"c":25.251255,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":757.7704796428},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.0,0.257552],"xyz":[2.0920755,0.0,6.5035112278],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.0,0.742448],"xyz":[2.0920755,0.0,18.7477437722],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.17987301],"xyz":[2.0920755,3.5860585,4.5420192431],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.82012699],"xyz":[2.0920755,3.5860585,20.7092357569],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.0,0.09174676],"xyz":[2.0920755,0.0,2.3167208322],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.0,0.90825324],"xyz":[2.0920755,0.0,22.9345341678],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[2.0920755,3.5860585,0.0],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.27199352],"xyz":[0.0,0.0,6.8681777319],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.72800658],"xyz":[0.0,0.0,18.3830797933],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.78477034,0.20603554],"xyz":[2.0920755,5.6284646966,5.2026559596],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.78477034,0.79396446],"xyz":[2.0920755,5.6284646966,20.0485990404],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.21522966,0.79396446],"xyz":[2.0920755,1.5436523034,20.0485990404],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.21522966,0.20603554],"xyz":[2.0920755,1.5436523034,5.2026559596],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.15419995],"xyz":[0.0,3.5860585,3.8937422584],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.84580005],"xyz":[0.0,3.5860585,21.3575127416],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.26138331,0.13101457],"xyz":[2.0920755,1.8746716812,3.3082823158],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.26138331,0.86898543],"xyz":[2.0920755,1.8746716812,21.9429726842],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.73861669,0.86898543],"xyz":[2.0920755,5.2974453188,21.9429726842],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.73861669,0.13101457],"xyz":[2.0920755,5.2974453188,3.3082823158],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.1165113],"xyz":[0.0,0.0,2.9420565467],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.8834887],"xyz":[0.0,0.0,22.3091984533],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.25939093,0.05225807],"xyz":[2.0920755,1.8603820987,1.3195818514],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.25939093,0.94774193],"xyz":[2.0920755,1.8603820987,23.9316731486],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.74060907,0.94774193],"xyz":[2.0920755,5.3117349013,23.9316731486],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.74060907,0.05225807],"xyz":[2.0920755,5.3117349013,1.3195818514],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.0],"xyz":[0.0,3.5860585,0.0],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.19141435],"xyz":[0.0,0.0,4.8334525625],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.80858565],"xyz":[0.0,0.0,20.4178024375],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.07865654],"xyz":[0.0,3.5860585,1.986176349],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.92134346],"xyz":[0.0,3.5860585,23.265078651],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}}]},"69":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.086823,0.0,0.232607],[0.0,9.465448,0.0],[-0.059997,0.0,6.856863]],"pbc":[true,true,true],"a":4.093437217,"b":9.465448,"c":6.8571254794,"alpha":90.0,"beta":87.2437692531,"gamma":90.0,"volume":265.3803153353},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.18968935,0.25,0.17660677],"xyz":[0.7646309221,2.366362,1.2550914974],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.81031065,0.75,0.82339323],"xyz":[3.2621950779,7.099086,5.8343785026],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66980532,0.25,0.3067272],"xyz":[2.7189730755,2.366362,2.2589877948],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33019468,0.75,0.6932728],"xyz":[1.3078529245,7.099086,4.8304822052],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68756283,0.25,0.47916256],"xyz":[2.7811992715,2.366362,3.4454839558],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31243717,0.75,0.52083744],"xyz":[1.2456267285,7.099086,3.6439860442],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.27122645,0.25,0.89843441],"xyz":[1.0545511248,2.366362,6.2235308347],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.72877355,0.75,0.10156559],"xyz":[2.9722748752,7.099086,0.8659391653],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21180647,0.03552534,0.27936006],"xyz":[0.8488547876,0.3362632585,1.9648013267],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.78819353,0.96447466,0.72063994],"xyz":[3.1779712124,9.1291847415,5.1246686733],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.78819353,0.53552534,0.72063994],"xyz":[3.1779712124,5.0689872585,5.1246686733],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21180647,0.46447466,0.27936006],"xyz":[0.8488547876,4.3964607415,1.9648013267],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14015442,0.0283941,0.4748517],"xyz":[0.5442966298,0.2687628771,3.2885939514],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85984558,0.9716059,0.5251483],"xyz":[3.4825293702,9.1966851229,3.8008760486],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85984558,0.5283941,0.5251483],"xyz":[3.4825293702,5.0014868771,3.8008760486],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14015442,0.4716059,0.4748517],"xyz":[0.5442966298,4.4639611229,3.2885939514],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.36190174,0.08645613,0.74088626],"xyz":[1.4345774018,0.8183460028,5.1643364614],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.63809826,0.91354387,0.25911374],"xyz":[2.5922485982,8.6471019972,1.9251335386],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.63809826,0.58645613,0.25911374],"xyz":[2.5922485982,5.5510700028,1.9251335386],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.36190174,0.41354387,0.74088626],"xyz":[1.4345774018,3.9143779972,5.1643364614],"label":"Zn","properties":{}}]},"31":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.768322,0.0,0.0],[0.0,3.768322,0.0],[1.884161,1.884161,6.517125]],"pbc":[true,true,true],"a":3.768322,"b":3.768322,"c":7.0408127097,"alpha":74.4781635913,"beta":74.4781635913,"gamma":90.0,"volume":92.5448088151},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.70751047,0.70751047,0.58497906],"xyz":[3.768322,3.768322,3.8123816564],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.29248953,0.29248953,0.41502094],"xyz":[1.884161,1.884161,2.7047433436],"label":"Zn","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[1.884161,1.884161,0.0],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14233929,0.14233929,0.71532143],"xyz":[1.8841610188,1.8841610188,4.6618391745],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85766071,0.85766071,0.28467857],"xyz":[3.7683219812,3.7683219812,1.8552858255],"label":"N","properties":{}}]},"68":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.629202,0.0,0.0],[0.0,5.629202,0.0],[0.0,0.0,5.629202]],"pbc":[true,true,true],"a":5.629202,"b":5.629202,"c":5.629202,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":178.3776753765},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[2.814601,2.814601,2.814601],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25,0.0,0.5],"xyz":[1.4073005,0.0,2.814601],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.75,0.0],"xyz":[2.814601,4.2219015,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.25],"xyz":[0.0,2.814601,1.4073005],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.75],"xyz":[0.0,2.814601,4.2219015],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.25,0.0],"xyz":[2.814601,1.4073005,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75,0.0,0.5],"xyz":[4.2219015,0.0,2.814601],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.25,0.25],"xyz":[1.4073005,1.4073005,1.4073005],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.75,0.75],"xyz":[1.4073005,4.2219015,4.2219015],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.75,0.75],"xyz":[4.2219015,4.2219015,4.2219015],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.75,0.25],"xyz":[1.4073005,4.2219015,1.4073005],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.25,0.75],"xyz":[1.4073005,1.4073005,4.2219015],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.25,0.75],"xyz":[4.2219015,1.4073005,4.2219015],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.75,0.25],"xyz":[4.2219015,4.2219015,1.4073005],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.25,0.25],"xyz":[4.2219015,1.4073005,1.4073005],"label":"N","properties":{}}]},"73":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[1.749531,-3.048103,0.0],[1.749531,3.048103,0.0],[0.0,0.0,8.634492]],"pbc":[true,true,true],"a":3.5145114338,"b":3.5145114338,"c":8.634492,"alpha":90.0,"beta":90.0,"gamma":120.2906178178,"volume":92.0911863363},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.6698258,0.3301742,0.25],"xyz":[1.749531,-1.0352930609,2.158623],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.3301742,0.6698258,0.75],"xyz":[1.749531,1.0352930609,6.475869],"label":"Zn","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[0.0,0.0,4.317246],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00158956,0.99841044,0.25],"xyz":[1.749531,3.0384127148,2.158623],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99841044,0.00158956,0.75],"xyz":[1.749531,-3.0384127148,6.475869],"label":"N","properties":{}}]},"47":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.380312,-6.691171,-0.394081],[5.380312,6.691171,-0.394081],[-0.621649,0.0,7.622393]],"pbc":[true,true,true],"a":8.5950466202,"b":8.5950466202,"c":7.6477004731,"alpha":95.5423321192,"beta":95.5423321192,"gamma":102.2453362396,"volume":545.5428472824},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.43380935,0.56619065,0.25],"xyz":[5.22489975,0.8857859155,1.51151725],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.56619065,0.43380935,0.75],"xyz":[4.91407525,-0.8857859155,5.32271375],"label":"Zn","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.04124018,0.95875982,0.25],"xyz":[5.22489975,6.1392808071,1.51151725],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.95875982,0.04124018,0.75],"xyz":[4.91407525,-6.1392808071,5.32271375],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.15480179,0.73674461,0.24234883],"xyz":[4.6461418867,3.8938789208,1.4959365285],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26325539,0.84519821,0.25765117],"xyz":[5.8036576133,3.8938789208,1.5270979715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.84519821,0.26325539,0.75765117],"xyz":[5.4928331133,-3.8938789208,5.3382944715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.73674461,0.15480179,0.74234883],"xyz":[4.3353173867,-3.8938789208,5.3071330285],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.30916777,0.45162915,0.40555707],"xyz":[3.8412106512,0.9532334545,2.7914997604],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.54837085,0.69083223,0.09444293],"xyz":[6.6085888488,0.9532334545,0.2315347396],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.69083223,0.54837085,0.59444293],"xyz":[6.2977643488,-0.9532334545,4.0427312396],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.45162915,0.30916777,0.90555707],"xyz":[3.5303861512,-0.9532334545,6.6026962604],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00874248,0.11999663,0.479499],"xyz":[0.3945765046,0.7444205421,3.6041961839],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.88000337,0.99125752,0.020501],"xyz":[10.0552229954,0.7444205421,-0.5811616839],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99125752,0.88000337,0.520501],"xyz":[9.7443984954,-0.7444205421,3.2300348161],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.11999663,0.00874248,0.979499],"xyz":[0.0837520046,-0.7444205421,7.4153926839],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82331917,0.56703037,0.21133745],"xyz":[7.3491365998,-1.7148721862,1.0629867624],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.43296963,0.17668083,0.28866255],"xyz":[3.1006629002,-1.7148721862,1.9600477376],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17668083,0.43296963,0.78866255],"xyz":[2.7898384002,1.7148721862,5.7712442376],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.56703037,0.82331917,0.71133745],"xyz":[7.0383120998,1.7148721862,4.8741832624],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82021728,0.43928951,0.1664966],"xyz":[6.6730370514,-2.5488528477,0.7727548231],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.56071049,0.17978272,0.3335034],"xyz":[3.7767624486,-2.5488528477,2.2502796769],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17978272,0.56071049,0.8335034],"xyz":[3.4659379486,2.5488528477,6.0614761769],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.43928951,0.82021728,0.6664966],"xyz":[6.3622125514,2.5488528477,4.5839513231],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02591212,0.12246309,0.04628719],"xyz":[0.7695305375,0.6460390505,0.2943473019],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87753691,0.97408788,0.45371281],"xyz":[9.6802689625,0.6460390505,2.7286871981],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97408788,0.87753691,0.95371281],"xyz":[9.3694444625,-0.6460390505,6.5398836981],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12246309,0.02591212,0.54628719],"xyz":[0.4587060375,-0.6460390505,4.1055438019],"label":"N","properties":{}}]},"28":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.724122,-1.572773,0.0],[0.0,3.145546,0.0],[0.0,0.0,10.570134]],"pbc":[true,true,true],"a":3.145545355,"b":3.145546,"c":10.570134,"alpha":90.0,"beta":90.0,"gamma":120.000006783,"volume":90.5739039367},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.33333333,0.66666667,0.25],"xyz":[0.9080406576,1.5727730157,2.6425335],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.66666667,0.33333333,0.75],"xyz":[1.8160813424,-0.0000000157,7.9276005],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[0.0,0.0,5.285067],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33333333,0.66666667,0.62866178],"xyz":[0.9080406576,1.5727730157,6.6450392553],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66666667,0.33333333,0.12866178],"xyz":[1.8160813424,-0.0000000157,1.3599722553],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33333333,0.66666667,0.87133822],"xyz":[0.9080406576,1.5727730157,9.2101617447],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66666667,0.33333333,0.37133822],"xyz":[1.8160813424,-0.0000000157,3.9250947447],"label":"N","properties":{}}]},"34":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.845331,-2.256375,1.002936],[5.845331,2.256375,1.002936],[-2.35901,0.0,3.49823]],"pbc":[true,true,true],"a":6.3454710826,"b":6.3454710826,"c":4.2193057857,"alpha":112.5809222744,"beta":112.5809222744,"gamma":41.6590031463,"volume":102.9549990948},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.19931503,0.19931503,0.63601203],"xyz":[0.8297659084,0.0,2.6247168016],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.80068497,0.80068497,0.36398797],"xyz":[8.5018860916,0.0,2.8793851984],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.74375205,0.25624795,0.0],"xyz":[5.845331,-1.0999920636,1.002936],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25624795,0.74375205,0.0],"xyz":[5.845331,1.0999920636,1.002936],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63229337,0.63229337,0.41424153],"xyz":[6.4147281618,0.0,2.7174117142],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36770663,0.36770663,0.58575847],"xyz":[2.9169238382,0.0,2.7866902858],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.1505916,0.1505916,0.05184831],"xyz":[1.6382048139,0.0,0.4834447874],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.8494084,0.8494084,0.94815169],"xyz":[7.6934471861,0.0,5.0206572126],"label":"N","properties":{}}]},"44":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.946714,0.0,0.0],[0.0,5.946714,0.0],[0.0,0.0,5.946714]],"pbc":[true,true,true],"a":5.946714,"b":5.946714,"c":5.946714,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":210.2960698602},"sites":[{"species":[{"element":"N","occu":1}],"abc":[0.55402836,0.55402836,0.55402836],"xyz":[3.2946482048,3.2946482048,3.2946482048],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.05402836,0.94597164,0.44597164],"xyz":[0.3212912048,5.6254227952,2.6520657952],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55402836,0.94597164,0.05402836],"xyz":[3.2946482048,5.6254227952,0.3212912048],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.94597164,0.44597164,0.05402836],"xyz":[5.6254227952,2.6520657952,0.3212912048],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.94597164,0.05402836,0.55402836],"xyz":[5.6254227952,0.3212912048,3.2946482048],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44597164,0.05402836,0.94597164],"xyz":[2.6520657952,0.3212912048,5.6254227952],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.05402836,0.55402836,0.94597164],"xyz":[0.3212912048,3.2946482048,5.6254227952],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44597164,0.44597164,0.44597164],"xyz":[2.6520657952,2.6520657952,2.6520657952],"label":"N","properties":{}}]},"12":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.5406,-1.466816,0.0],[0.0,2.933632,0.0],[0.0,0.0,4.657195]],"pbc":[true,true,true],"a":2.9336321409,"b":2.933632,"c":4.657195,"alpha":90.0,"beta":90.0,"gamma":119.9999984117,"volume":34.7109380547},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.33333333,0.66666667,0.75],"xyz":[0.8468666582,1.4668160147,3.49289625],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.66666667,0.33333333,0.25],"xyz":[1.6937333418,-0.0000000147,1.16429875],"label":"Ti","properties":{}}]},"4":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.952401,-2.607102,-0.345365],[4.952401,2.607102,-0.345365],[-0.793138,0.0,6.257486]],"pbc":[true,true,true],"a":5.6073642192,"b":5.6073642192,"c":6.3075509453,"alpha":99.9133847309,"beta":99.9133847309,"gamma":55.4130030441,"volume":160.1577058599},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.95747786,0.04252214,0.0],"xyz":[4.952401,-2.3853828875,-0.345365],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.96835037,0.03164963,0.5],"xyz":[4.555832,-2.4420743727,2.783378],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.36677608,0.33913125,0.20324262],"xyz":[3.3347367219,-0.0720728916,1.0279921642],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66086875,0.63322392,0.79675738],"xyz":[5.7769272781,-0.0720728916,4.5387638358],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.57577517,0.7550833,0.28765311],"xyz":[6.3627962053,0.4674745843,1.3403533732],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.2449167,0.42422483,0.71234689],"xyz":[2.7488677947,0.4674745843,4.2264026268],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85703681,0.61391281,0.53609174],"xyz":[6.8595376386,-0.6338490666,2.8465720423],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.38608719,0.14296319,0.46390826],"xyz":[2.2521263614,-0.6338490666,2.7201839577],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.20259831,0.78613842,0.2492118],"xyz":[4.6989614218,1.5213485879,1.2179642888],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21386158,0.79740169,0.7507882],"xyz":[4.4127025782,1.5213485879,4.3487917112],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.64474828,0.89284159,0.05563091],"xyz":[7.5706386211,0.6468045647,-0.182920085],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.10715841,0.35525172,0.94436909],"xyz":[1.5410253789,0.6468045647,5.749676085],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75781176,0.31376727,0.27014504],"xyz":[5.092626763,-1.157669278,1.3203429141],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68623273,0.24218824,0.72985496],"xyz":[4.019037237,-1.157669278,4.2464130859],"label":"N","properties":{}}]},"3":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[10.22588,0.0,0.0],[0.0,6.241736,0.0],[0.0,0.0,4.996117]],"pbc":[true,true,true],"a":10.22588,"b":6.241736,"c":4.996117,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":318.8883754526},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[5.11294,3.120868,2.4980585],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[5.11294,0.0,2.4980585],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.0],"xyz":[0.0,3.120868,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.27439835,0.25,0.02027797],"xyz":[2.8059645993,1.560434,0.1013111106],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.22560165,0.75,0.52027797],"xyz":[2.3069754007,4.681302,2.5993696106],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.72560165,0.75,0.97972203],"xyz":[7.4199154007,4.681302,4.8948058894],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.77439835,0.25,0.47972203],"xyz":[7.9189045993,1.560434,2.3967473894],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.10637322,0.25,0.5618105],"xyz":[1.0877597829,1.560434,2.8068709898],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.39362678,0.75,0.0618105],"xyz":[4.0251802171,4.681302,0.3088124898],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.89362678,0.75,0.4381895],"xyz":[9.1381202171,4.681302,2.1892460102],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.60637322,0.25,0.9381895],"xyz":[6.2006997829,1.560434,4.6873045102],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.09067969,0.25,0.17405839],"xyz":[0.9272796284,1.560434,0.8696160813],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.40932031,0.75,0.67405839],"xyz":[4.1856603716,4.681302,3.3676745813],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.90932031,0.75,0.82594161],"xyz":[9.2986003716,4.681302,4.1265009187],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.59067969,0.25,0.32594161],"xyz":[6.0402196284,1.560434,1.6284424187],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.43282869,0.25,0.79687706],"xyz":[4.4260542445,1.560434,3.9812910264],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.06717131,0.75,0.29687706],"xyz":[0.6868857555,4.681302,1.4832325264],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.56717131,0.75,0.20312294],"xyz":[5.7998257555,4.681302,1.0148259736],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.93282869,0.25,0.70312294],"xyz":[9.5389942445,1.560434,3.5128844736],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33440626,0.99742074,0.26413801],"xyz":[3.419598286,6.22563694,1.3196644021],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.16559374,0.49742074,0.76413801],"xyz":[1.693341714,3.10476894,3.8177229021],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.16559374,0.00257926,0.76413801],"xyz":[1.693341714,0.01609906,3.8177229021],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66559374,0.49742074,0.73586199],"xyz":[6.806281714,3.10476894,3.6764525979],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66559374,0.00257926,0.73586199],"xyz":[6.806281714,0.01609906,3.6764525979],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.83440626,0.50257926,0.23586199],"xyz":[8.532538286,3.13696706,1.1783940979],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.83440626,0.99742074,0.23586199],"xyz":[8.532538286,6.22563694,1.1783940979],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33440626,0.50257926,0.26413801],"xyz":[3.419598286,3.13696706,1.3196644021],"label":"N","properties":{}}]},"21":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.380653,0.0,0.0],[0.0,14.311422,0.0],[2.690327,7.155711,2.712897]],"pbc":[true,true,true],"a":5.380653,"b":14.311422,"c":8.1118351447,"alpha":28.0993508798,"beta":70.6307695167,"gamma":90.0,"volume":208.9060792905},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.59605935,0.66971651,0.9454688],"xyz":[5.7508087701,16.3500970873,2.5649594711],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.45847185,0.16971651,0.9454688],"xyz":[5.0104981754,9.1943860873,2.5649594711],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.45847185,0.38481469,0.9454688],"xyz":[5.0104981754,12.2727469127,2.5649594711],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.59605935,0.88481469,0.9454688],"xyz":[5.7508087701,19.4284579127,2.5649594711],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.99066415,0.99066415,0.01867171],"xyz":[5.3806530362,14.3114220716,0.050654426],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.99066415,0.49066415,0.01867171],"xyz":[5.3806530362,7.1557110716,0.050654426],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.9341569,0.25680447,0.98639105],"xyz":[7.6800886008,10.7335664284,2.6759773204],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.07945204,0.75680447,0.98639105],"xyz":[3.0812183318,17.8892774284,2.6759773204],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.23781504,0.8168759,0.31447074],"xyz":[2.125629331,13.9409174599,0.8531267271],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44771422,0.3168759,0.31447074],"xyz":[3.2550239835,6.7852064599,0.8531267271],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44771422,0.86865337,0.31447074],"xyz":[3.2550239835,14.6819266832,0.8531267271],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.23781504,0.36865337,0.31447074],"xyz":[2.125629331,7.5262156832,0.8531267271],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.9701002,0.028419,0.20962174],"xyz":[5.7837235783,1.9067088926,0.5686821896],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82027806,0.528419,0.20962174],"xyz":[4.9775826313,9.0624198926,0.5686821896],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82027806,0.76195926,0.20962174],"xyz":[4.9775826313,12.4047131074,0.5686821896],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.9701002,0.26195926,0.20962174],"xyz":[5.7837235783,5.2490021074,0.5686821896],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26244227,0.61609265,0.2678147],"xyz":[2.1326199058,10.7335665,0.7265536962],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.46974303,0.11609265,0.2678147],"xyz":[3.248033362,3.5778555,0.7265536962],"label":"N","properties":{}}]},"13":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[9.402404,-0.00113,0.397882],[-0.00065,5.646741,0.000464],[-3.073322,0.000794,8.683129]],"pbc":[true,true,true],"a":9.4108188986,"b":5.6467410565,"c":9.21097378,"alpha":89.9884221515,"beta":107.0678557157,"gamma":90.0132701692,"volume":467.9177850383},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.05277259,0.0446846,0.22554858],"xyz":[-0.1970232467,0.2524418154,1.9794854132],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.94722716,0.95531565,0.77445205],"xyz":[6.5254509597,5.393964597,7.1019949578],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.94695245,0.54466241,0.27464315],"xyz":[8.0592086381,3.0747155721,2.7617899585],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.05304916,0.45533967,0.72535521],"xyz":[-1.7307564613,2.57170117,6.3196714427],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.18677287,0.65379652,0.1218568],"xyz":[1.381183828,3.6917053161,1.1327152386],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.81322239,0.34620769,0.87814188],"xyz":[4.9472076587,1.954723461,7.9487464157],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.81300997,0.1535504,0.37838871],"xyz":[6.4812380392,0.8664410786,3.6091512613],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.18699246,0.84645005,0.62161212],"xyz":[-0.1527857425,4.7799664603,5.4723319127],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.42929711,0.36288193,0.28830955],"xyz":[3.1501209082,2.0488440843,2.6744069845],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.57069576,0.63711251,0.7116907],"xyz":[3.178243288,3.597529528,6.4070673468],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.57061516,0.86310666,0.2115604],"xyz":[4.7144000119,4.8732629482,2.0644442271],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.42938961,0.13689561,0.78843907],"xyz":[1.614078465,0.7731548641,7.0170280698],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.22918593,0.15003641,0.98725724],"xyz":[-0.879358214,0.84774165,8.6637405442],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.77081261,0.84996283,0.01274258],"xyz":[7.2077770402,4.79865906,0.4177323116],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.77079612,0.65007753,0.51282933],"xyz":[5.6708243093,3.6703556287,4.7599507652],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.22920238,0.34992259,0.48717364],"xyz":[0.6575844592,1.976050053,4.321549427],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.61109232,0.38180476,0.12711576],"xyz":[5.3548210391,2.1553629879,1.3470823339],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.38891406,0.61819165,0.87288127],"xyz":[0.9736800783,3.4910217308,7.734369414],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.38888351,0.88195244,0.37279498],"xyz":[2.5101475873,4.9800135638,3.3921658766],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.61111673,0.11804393,0.62720759],"xyz":[3.8182787732,0.6663709403,5.6893315329],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02632592,0.24383232,0.39072107],"xyz":[-0.9534432158,1.3771384427,3.4032692017],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97367511,0.75617134,0.6092774],"xyz":[7.2818896001,4.269287222,5.6781929246],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.9735228,0.74373049,0.10950746],"xyz":[8.816419558,4.198640319,1.3385596913],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02648239,0.25627025,0.890496],"xyz":[-2.4879493937,1.4477688565,7.7429474177],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25275843,0.02636994,0.18684925],"xyz":[1.8022718221,0.1487669626,1.7230164066],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.74723814,0.97364108,0.81314111],"xyz":[4.5261575473,5.4977002607,7.3583735284],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7469406,0.52616949,0.31323453],"xyz":[6.0600247028,2.9705474975,3.0172941937],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25306032,0.4738316,0.68676848],"xyz":[0.268406696,2.6758636588,6.0642073091],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3660237,0.41637224,0.03775171],"xyz":[3.3252088981,2.3507625669,0.4736304064],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63397686,0.58361155,0.96224839],"xyz":[3.0032280704,3.2955508988,8.6078456772],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63414571,0.91658293,0.46221345],"xyz":[4.5413676168,5.1753568236,4.2661994698],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36585057,0.08341002,0.53778712],"xyz":[1.787027659,0.4710083716,4.8152789962],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71185292,0.07797699,0.14532722],"xyz":[6.246440715,0.4396268625,1.5451646433],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28814492,0.9220329,0.85467531],"xyz":[0.0819631939,5.2068339882,7.5363314702],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28829662,0.57788891,0.35464532],"xyz":[1.6203664011,3.2631448147,3.194407239],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7117046,0.42211213,0.64535556],"xyz":[4.7080743646,2.3832660572,5.887075888],"label":"N","properties":{}}]},"42":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.021411,0.0,0.0],[0.0,4.021411,0.0],[2.010706,2.010706,8.874517]],"pbc":[true,true,true],"a":4.021411,"b":4.021411,"c":9.3189553717,"alpha":77.5395779291,"beta":77.5395779291,"gamma":90.0,"volume":143.5164386209},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.8360282,0.8360282,0.3279436],"xyz":[4.021411164,4.021411164,2.9103410532],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.1639718,0.1639718,0.6720564],"xyz":[2.010705836,2.010705836,5.9641759468],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.6092288,0.6092288,0.7815424],"xyz":[4.0214113908,4.0214113908,6.935811315],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.3907712,0.3907712,0.2184576],"xyz":[2.0107056092,2.0107056092,1.938705685],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6124978,0.1124978,0.77500439],"xyz":[4.0214113674,2.0107058674,6.8777896341],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.1124978,0.6124978,0.77500439],"xyz":[2.0107058674,4.0214113674,6.8777896341],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3875022,0.8875022,0.22499561],"xyz":[2.0107056326,4.0214111326,1.9967273659],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.8875022,0.3875022,0.22499561],"xyz":[4.0214111326,2.0107056326,1.9967273659],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.72695695,0.72695695,0.5460861],"xyz":[4.021411273,4.021411273,4.8462503779],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.27304305,0.27304305,0.4539139],"xyz":[2.010705727,2.010705727,4.0282666221],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[2.0107055,2.0107055,0.0],"label":"N","properties":{}}]},"48":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.082063,-2.08132,0.050838],[2.082063,2.08132,0.050838],[-1.049178,0.0,9.996562]],"pbc":[true,true,true],"a":2.9443953166,"b":2.9443953166,"c":10.0514688626,"alpha":93.2468939903,"beta":93.2468939903,"gamma":89.9624752467,"volume":86.8610178892},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.4612553,0.4612553,0.29720372],"xyz":[1.6089055828,0.0,3.0179140075],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5387447,0.5387447,0.70279628],"xyz":[1.5060424172,0.0,7.0803239925],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[-0.524589,0.0,4.998281],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[1.557474,0.0,5.049119],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.95590632,0.95590632,0.27067391],"xyz":[3.6965292491,0.0,2.8030012541],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.04409368,0.04409368,0.72932609],"xyz":[-0.5815812491,0.0,7.2952367459],"label":"N","properties":{}}]},"60":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[8.736347,0.0,0.0],[0.0,8.231356,0.0],[0.0,0.0,6.998135]],"pbc":[true,true,true],"a":8.736347,"b":8.231356,"c":6.998135,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":503.2497602287},"sites":[{"species":[{"element":"N","occu":1}],"abc":[0.04933257,0.15515104,0.0],"xyz":[0.4309864499,1.277103444,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.45066743,0.65515104,0.5],"xyz":[3.9371870501,5.392781444,3.4990675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.95066743,0.84484896,0.0],"xyz":[8.3053605501,6.954252556,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.54933257,0.34484896,0.5],"xyz":[4.7991599499,2.838574556,3.4990675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.060552,0.97872251,0.5],"xyz":[0.5290032835,8.056213405,3.4990675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.439448,0.47872251,0.0],"xyz":[3.8391702165,3.940535405,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.939448,0.02127749,0.5],"xyz":[8.2073437165,0.175142595,3.4990675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.560552,0.52127749,0.0],"xyz":[4.8971767835,4.290820595,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14268832,0.43858699,0.5],"xyz":[1.2465746764,3.6101656517,3.4990675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.35731168,0.93858699,0.0],"xyz":[3.1215988236,7.7258436517,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85731168,0.56141301,0.5],"xyz":[7.4897723236,4.6211903483,3.4990675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.64268832,0.06141301,0.0],"xyz":[5.6147481764,0.5055123483,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36196035,0.18003421,0.24899865],"xyz":[3.1622112178,1.4819256747,1.7425261675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.13803965,0.68003421,0.74899865],"xyz":[1.2059622822,5.5976036747,5.2415936675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63803965,0.81996579,0.75100135],"xyz":[5.5741357822,6.7494303253,5.2556088325],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.86196035,0.31996579,0.25100135],"xyz":[7.5303847178,2.6337523253,1.7565413325],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.13803965,0.68003421,0.25100135],"xyz":[1.2059622822,5.5976036747,1.7565413325],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63803965,0.81996579,0.24899865],"xyz":[5.5741357822,6.7494303253,1.7425261675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.86196035,0.31996579,0.74899865],"xyz":[7.5303847178,2.6337523253,5.2415936675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36196035,0.18003421,0.75100135],"xyz":[3.1622112178,1.4819256747,5.2556088325],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.32947201,0.28836426,0.5],"xyz":[2.8783818061,2.3736288817,3.4990675],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.17052799,0.78836426,0.0],"xyz":[1.4897916939,6.4893068817,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.67052799,0.71163574,0.5],"xyz":[5.8579651939,5.8577271183,3.4990675],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.82947201,0.21163574,0.0],"xyz":[7.2465553061,1.7420491183,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.5,0.30022293],"xyz":[0.0,4.115678,2.1010005942],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5,0.0,0.80022293],"xyz":[4.3681735,0.0,5.6000680942],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.5,0.69977707],"xyz":[0.0,4.115678,4.8971344058],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5,0.0,0.19977707],"xyz":[4.3681735,0.0,1.3980669058],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.26884529,0.16402866,0.0],"xyz":[2.3487257428,1.3501782947,0.0],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.23115471,0.66402866,0.5],"xyz":[2.0194477572,5.4658562947,3.4990675],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.73115471,0.83597134,0.0],"xyz":[6.3876212572,6.8811777053,0.0],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.76884529,0.33597134,0.5],"xyz":[6.7168992428,2.7654997053,3.4990675],"label":"Ti","properties":{}}]},"72":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.839669,0.0,0.0],[0.0,5.839669,0.0],[0.0,0.0,10.063436]],"pbc":[true,true,true],"a":5.839669,"b":5.839669,"c":10.063436,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":343.1806178955},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.96905875,0.80718338,0.81186643],"xyz":[5.6589823416,4.7136837615,8.1701658589],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.03094125,0.19281662,0.31186643],"xyz":[0.1806866584,1.1259852385,3.1384478589],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.19281662,0.96905875,0.06186643],"xyz":[1.1259852385,5.6589823416,0.6225888589],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.80718338,0.03094125,0.56186643],"xyz":[4.7136837615,0.1806866584,5.6543068589],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.10899183,0.34228606,0.88023088],"xyz":[0.6364762109,1.9988372937,8.8581471261],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.89100817,0.65771394,0.38023088],"xyz":[5.2031927891,3.8408317063,3.8264291261],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.65771394,0.10899183,0.13023088],"xyz":[3.8408317063,0.6364762109,1.3105701261],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.34228606,0.89100817,0.63023088],"xyz":[1.9988372937,5.2031927891,6.3422881261],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.60631294,0.18018496,0.83510905],"xyz":[3.54066688,1.0522205252,8.4040664777],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.39368706,0.81981504,0.33510905],"xyz":[2.29900212,4.7874484748,3.3723484777],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.81981504,0.60631294,0.08510905],"xyz":[4.7874484748,3.54066688,0.8564894777],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.18018496,0.39368706,0.58510905],"xyz":[1.0522205252,2.29900212,5.8882074777],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.48525695,0.69477963,0.89229795],"xyz":[2.8337399679,4.0572830671,8.9795833128],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.51474305,0.30522037,0.39229795],"xyz":[3.0059290321,1.7823859329,3.9478653128],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.30522037,0.48525695,0.14229795],"xyz":[1.7823859329,2.8337399679,1.4320063128],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.69477963,0.51474305,0.64229795],"xyz":[4.0572830671,3.0059290321,6.4637243128],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.34294622,0.11501552,0.23713654],"xyz":[2.0026924096,0.6716525667,2.3864083936],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.65705378,0.88498448,0.73713654],"xyz":[3.8369765904,5.1680164333,7.4181263936],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.88498448,0.34294622,0.48713654],"xyz":[5.1680164333,2.0026924096,4.9022673936],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.11501552,0.65705378,0.98713654],"xyz":[0.6716525667,3.8369765904,9.9339853936],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.73779301,0.97899975,0.33796876],"xyz":[4.3084669689,5.7170344911,3.4011269863],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26220699,0.02100025,0.83796876],"xyz":[1.5312020311,0.1226345089,8.4328449863],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02100025,0.73779301,0.58796876],"xyz":[0.1226345089,4.3084669689,5.9169859863],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97899975,0.26220699,0.08796876],"xyz":[5.7170344911,1.5312020311,0.8852679863],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00065757,0.82328758,0.21040091],"xyz":[0.0038399911,4.807726959,2.1173560921],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99934243,0.17671242,0.71040091],"xyz":[5.8358290089,1.031942041,7.1490740921],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17671242,0.00065757,0.46040091],"xyz":[1.031942041,0.0038399911,4.6332150921],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82328758,0.99934243,0.96040091],"xyz":[4.807726959,5.8358290089,9.6649330921],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55444204,0.73450842,0.50475735],"xyz":[3.2377579933,4.2892860505,5.0795932873],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44555796,0.26549158,0.00475735],"xyz":[2.6019110067,1.5503829495,0.0478752873],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26549158,0.55444204,0.75475735],"xyz":[1.5503829495,3.2377579933,7.5954522873],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.73450842,0.44555796,0.25475735],"xyz":[4.2892860505,2.6019110067,2.5637342873],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51196313,0.78128955,0.10023213],"xyz":[2.9896952194,4.5624723652,1.0086796254],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48803687,0.21871045,0.60023213],"xyz":[2.8499737806,1.2771966348,6.0403976254],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21871045,0.51196313,0.35023213],"xyz":[1.2771966348,2.9896952194,3.5245386254],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.78128955,0.48803687,0.85023213],"xyz":[4.5624723652,2.8499737806,8.5562566254],"label":"N","properties":{}}]},"51":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.383894,0.0,0.0],[0.0,7.84233,0.0],[3.191947,3.921165,4.697699]],"pbc":[true,true,true],"a":6.383894,"b":7.84233,"c":6.901625642,"alpha":55.3786153986,"beta":62.4519677107,"gamma":90.0,"volume":235.1884374827},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.25,0.75,0.5],"xyz":[3.191947,7.84233,2.3488495],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.75,0.25,0.5],"xyz":[6.383894,3.921165,2.3488495],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.26264823,0.24098197,0.0],"xyz":[1.6767184596,1.8898601328,0.0],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.23735177,0.74098197,1.0],"xyz":[4.7071755404,9.7321901328,4.697699],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.76264823,0.25901803,0.0],"xyz":[4.8686654596,2.0313048672,0.0],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.73735177,0.75901803,1.0],"xyz":[7.8991225404,9.8736348672,4.697699],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75,0.75,0.5],"xyz":[6.383894,7.84233,2.3488495],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25,0.25,0.5],"xyz":[3.191947,3.921165,2.3488495],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99047279,0.08221216,1.0],"xyz":[9.5150203012,4.5658998887,4.697699],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.50952721,0.58221216,0.0],"xyz":[3.2527676988,4.5658998887,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.49047279,0.41778784,1.0],"xyz":[6.3230733012,7.1975951113,4.697699],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00952721,0.91778784,0.0],"xyz":[0.0608206988,7.1975951113,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.08382932,0.45000872,1.0],"xyz":[3.727104493,7.4502818851,4.697699],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41617068,0.95000872,0.0],"xyz":[2.656789507,7.4502818851,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58382932,0.04999128,1.0],"xyz":[6.919051493,4.3132131149,4.697699],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.91617068,0.54999128,0.0],"xyz":[5.848736507,4.3132131149,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.94713593,0.03445718,0.57572495],"xyz":[7.8840989077,2.5277371,2.7045825219],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55286407,0.11018214,0.42427505],"xyz":[4.8836890923,2.5277371784,1.9931164781],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02286088,0.46554282,0.42427505],"xyz":[1.5002049077,5.3145929,1.9931164781],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.52286088,0.61018214,0.42427505],"xyz":[4.6921519077,6.4489021784,1.9931164781],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97713912,0.53445718,0.57572495],"xyz":[8.0756360923,6.4489021,2.7045825219],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44713593,0.88981786,0.57572495],"xyz":[4.6921519077,9.2357578216,2.7045825219],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.05286407,0.96554282,0.42427505],"xyz":[1.6917420923,9.2357579,1.9931164781],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.47713912,0.38981786,0.57572495],"xyz":[4.8836890923,5.3145928216,2.7045825219],"label":"N","properties":{}}]},"53":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.166867,0.0,6.757404],[-1.583433,2.742587,6.757404],[-1.583433,-2.742587,6.757404]],"pbc":[true,true,true],"a":7.4626774964,"b":7.4626772902,"c":7.4626772902,"alpha":43.1239130362,"beta":43.1239122091,"gamma":43.1239122091,"volume":176.0724191204},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.01183712,0.01183712,0.01183712],"xyz":[0.0000000118,0.0,0.2399646061],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.17509278,0.17509278,0.17509278],"xyz":[0.0000001751,0.0,3.5495179558],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.58822661,0.58822661,0.58822661],"xyz":[0.0000005882,0.0,11.924654542],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.44824029,0.44824029,0.44824029],"xyz":[0.0000004482,0.0,9.0868221858],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.88012936,0.88012936,0.88012936],"xyz":[0.0000008801,0.0,17.8421689733],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.73794629,0.73794629,0.73794629],"xyz":[0.0000007379,0.0,14.9598036355],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.30888986,0.30888986,0.30888986],"xyz":[0.0000003089,0.0,6.2618807266],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.22038392,0.96628227,0.59433793],"xyz":[-1.7732109616,1.0200897116,12.0349643645],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.96628227,0.59433793,0.22038392],"xyz":[1.7700299704,1.0256014064,12.0349643645],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.59433793,0.22038392,0.96628227],"xyz":[0.0031827721,-2.045691118,12.0349643645],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.10520064,0.47388568,0.80909796],"xyz":[-1.6983621988,-0.9193488414,9.3805220064],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.47388568,0.80909796,0.10520064],"xyz":[0.0530023467,1.9304996392,9.3805220064],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.80909796,0.10520064,0.47388568],"xyz":[1.6453612404,-1.0111507978,9.3805220064],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07908029,0.3786331,0.71223592],"xyz":[-1.4768812442,-0.9149347573,7.9058201472],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3786331,0.71223592,0.07908029],"xyz":[-0.0539155309,1.7364843998,7.9058201472],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71223592,0.07908029,0.3786331],"xyz":[1.530797945,-0.8215496425,7.9058201472],"label":"N","properties":{}}]},"20":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[14.680227,-1.507597,-0.760453],[14.680227,1.507597,-0.760453],[-7.316016,0.0,9.877532]],"pbc":[true,true,true],"a":14.7770160131,"b":14.7770160131,"c":12.2918561871,"alpha":129.2457249808,"beta":129.2457249808,"gamma":11.7113631649,"volume":420.4414423578},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.36914484,0.36914484,0.97637487],"xyz":[3.6950859232,0.0,9.0827394204],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.63085516,0.63085516,0.02362513],"xyz":[18.3493520768,0.0,-0.7261134204],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.48270716,0.48270716,0.65034958],"xyz":[9.4145334338,0.0,5.6896965717],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.51729284,0.51729284,0.34965042],"xyz":[12.6299045662,0.0,2.6669294283],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.29723292,0.29723292,0.6778237],"xyz":[3.7679244406,0.0,6.2431619557],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.70276708,0.70276708,0.3221763],"xyz":[18.2765135594,0.0,2.1134640443],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.90549748,0.90549748,0.3038491],"xyz":[24.3628522315,0.0,1.6241026581],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.09450252,0.09450252,0.6961509],"xyz":[-2.3184142315,0.0,6.7325233419],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.24540401,0.24540401,0.1840197],"xyz":[5.8588820775,0.0,1.4444240441],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75459599,0.75459599,0.8159803],"xyz":[16.1855559225,0.0,6.9122019559],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.16410137,0.16410137,0.49746173],"xyz":[1.1786527492,0.0,4.6641113986],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.83589863,0.83589863,0.50253827],"xyz":[20.8657852508,0.0,3.6925146014],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.20389767,0.20389767,0.90895922],"xyz":[-0.6634320361,0.0,8.6681645926],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.79610233,0.79610233,0.09104078],"xyz":[22.7078700361,0.0,-0.3115385926],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.16237373,0.16237373,0.99331877],"xyz":[-2.4997695839,0.0,9.5645827567],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.83762627,0.83762627,0.00668123],"xyz":[24.5442075839,0.0,-1.2079567567],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.35419025,0.35419025,0.23475963],"xyz":[8.6816813331,0.0,1.7801556813],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.64580975,0.64580975,0.76524037],"xyz":[13.3627566669,0.0,6.5764703187],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.15175152,0.15175152,0.18211561],"xyz":[3.1231328058,0.0,1.5680529682],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.84824848,0.84824848,0.81788439],"xyz":[18.9213051942,0.0,6.7885730318],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.29589949,0.29589949,0.52234703],"xyz":[4.8662441357,0.0,4.7094641942],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.70410051,0.70410051,0.47765297],"xyz":[17.1781938643,0.0,3.6471618058],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07845619,0.07845619,0.41454019],"xyz":[-0.7292733052,0.0,3.9753095019],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92154381,0.92154381,0.58545981],"xyz":[22.7737113052,0.0,4.3813164981],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.23587806,0.23587806,0.70148934],"xyz":[1.793379695,0.0,6.5702350468],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.76412194,0.76412194,0.29851066],"xyz":[20.251058305,0.0,1.7863909532],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.04432356,0.04432356,0.75256226],"xyz":[-4.2043976907,0.0,7.3660458368],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.95567644,0.95567644,0.24743774],"xyz":[26.2488356907,0.0,0.9905801632],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.93768367,0.93768367,0.50017113],"xyz":[23.8715582698,0.0,3.5143276222],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.06231633,0.06231633,0.49982887],"xyz":[-1.8271202698,0.0,4.8422983778],"label":"N","properties":{}}]},"32":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.730469,-4.584523,-0.342761],[6.730469,4.584523,-0.342761],[-1.806793,0.0,5.356055]],"pbc":[true,true,true],"a":8.1507391812,"b":8.1507391812,"c":5.652594635,"alpha":107.6853139101,"beta":107.6853139101,"gamma":68.4531791678,"volume":324.8543848442},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.7141318,0.2858682,0.25],"xyz":[6.27877075,-1.9633843243,0.99625275],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.2858682,0.7141318,0.75],"xyz":[5.37537425,1.9633843243,3.67428025],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.06304672,0.16684276,0.66757928],"xyz":[0.3410864485,0.4758553327,3.4967941925],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.83315724,0.93695328,0.83242072],"xyz":[10.4096620515,0.4758553327,3.8517663075],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.93695328,0.83315724,0.33242072],"xyz":[11.3130585515,-0.4758553327,1.1737388075],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.16684276,0.06304672,0.16757928],"xyz":[1.2444829485,-0.4758553327,0.8187666925],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.26619824,0.44058687,0.15513109],"xyz":[4.476705505,0.7994886852,0.5886322792],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.55941313,0.73380176,0.34486891],"xyz":[8.080835995,0.7994886852,1.4038732208],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.73380176,0.55941313,0.84486891],"xyz":[7.177439495,-0.7994886852,4.0819007208],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.44058687,0.26619824,0.65513109],"xyz":[3.573309005,-0.7994886852,3.2666597792],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.13372099,0.26871112,0.03056721],"xyz":[2.6533282199,0.6188653558,0.0257816255],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.73128888,0.86627901,0.46943279],"xyz":[9.9042132801,0.6188653558,1.9667238745],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.86627901,0.73128888,0.96943279],"xyz":[9.0008167801,-0.6188653558,4.6447513745],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26871112,0.13372099,0.53056721],"xyz":[1.7499317199,-0.6188653558,2.7038091255],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31540762,0.4836684,0.86537518],"xyz":[3.8146025637,0.7713954159,4.361104964],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5163316,0.68459238,0.63462482],"xyz":[6.9361459363,0.7713954159,2.987455536],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68459238,0.5163316,0.13462482],"xyz":[7.8395424363,-0.7713954159,0.309428036],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.4836684,0.31540762,0.36537518],"xyz":[4.7179990637,-0.7713954159,1.683077464],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.84326964,0.35643738,0.60951799],"xyz":[6.9733180695,-2.2318936931,2.8533991],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.64356262,0.15673036,0.89048201],"xyz":[3.7774304305,-2.2318936931,4.4951614],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.15673036,0.64356262,0.39048201],"xyz":[4.6808269305,2.2318936931,1.8171339],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.35643738,0.84326964,0.10951799],"xyz":[7.8767145695,2.2318936931,0.1753716],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.95866177,0.04133823,0.25],"xyz":[6.27877075,-4.2054908676,0.99625275],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.04133823,0.95866177,0.75],"xyz":[5.37537425,4.2054908676,3.67428025],"label":"N","properties":{}}]},"41":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.776201,-3.912241,0.0],[0.0,7.824483,0.0],[0.0,0.0,4.868194]],"pbc":[true,true,true],"a":7.8244827071,"b":7.824483,"c":4.868194,"alpha":90.0,"beta":90.0,"gamma":119.9999970104,"volume":258.1129579999},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.43304785,1.0,0.90142116],"xyz":[2.9344192742,6.1302954463,4.3882930826],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.56695215,0.56695215,0.90142116],"xyz":[3.8417817258,2.2180540132,4.3882930826],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.43304785,0.90142116],"xyz":[0.0,3.3883755405,4.3882930826],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.73676343,1.0,0.46239314],"xyz":[4.9924570911,4.9420869019,2.2510195098],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.26323657,0.26323657,0.46239314],"xyz":[1.7837439089,1.0298451651,2.2510195098],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.73676343,0.46239314],"xyz":[0.0,5.7647929331,2.2510195098],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.33333333,0.66666667,0.4807268],"xyz":[2.2587336441,3.9122417058,2.3402713234],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.66666667,0.33333333,0.4807268],"xyz":[4.5174673559,0.0000002942,2.3402713234],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.54692646,0.0,0.24748564],"xyz":[3.7060836252,-2.1397081208,1.2048081077],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.45307354,0.45307354,0.24748564],"xyz":[3.0701173748,1.7725333323,1.2048081077],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.54692646,0.24748564],"xyz":[0.0,4.2794167885,1.2048081077],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.20794832,0.42235553,0.6827911],"xyz":[1.4090996139,2.4911697211,3.3239595363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21440721,0.79205168,0.6827911],"xyz":[1.4528663508,5.3585822276,3.3239595363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.57764447,0.78559279,0.6827911],"xyz":[3.9142350353,3.8869730513,3.3239595363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.79205168,0.21440721,0.6827911],"xyz":[5.3671013861,-1.4210714869,3.3239595363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.42235553,0.20794832,0.6827911],"xyz":[2.8619659647,-0.0252685263,3.3239595363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.78559279,0.57764447,0.6827911],"xyz":[5.3233346492,1.4463410132,3.3239595363],"label":"N","properties":{}}]},"58":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.112473,-0.000003,2.815429],[-2.556234,4.427533,2.815429],[-2.556238,-4.42753,2.815429]],"pbc":[true,true,true],"a":5.8364390368,"b":5.8364390841,"c":5.8364385603,"alpha":98.6821353837,"beta":98.6821214653,"gamma":98.6821310851,"volume":191.1870592868},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.55169467,0.35282435,0.16914522],"xyz":[1.4862470662,0.8132442618,3.0228254376],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.64717565,0.83085478,0.44830533],"xyz":[0.038833679,1.6937497174,5.4234615624],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.83085478,0.44830533,0.64717565],"xyz":[1.4474143135,-0.8805054556,5.4234615624],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.16914522,0.55169467,0.35282435],"xyz":[-1.4474133135,0.8805054556,3.0228254376],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.35282435,0.16914522,0.55169467],"xyz":[-0.038832679,-1.6937497174,3.0228254376],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.44830533,0.64717565,0.83085478],"xyz":[-1.4862460662,-0.8132442618,5.4234615624],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.22107771,0.22107771,0.22107771],"xyz":[0.0000002211,1.110223025e-16,1.867285788],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.77892229,0.77892229,0.77892229],"xyz":[0.0000007789,4.440892099e-16,6.579001212],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.15262017,0.41165775,0.66079431],"xyz":[-1.9611745639,-1.1030588164,3.4491038834],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58834225,0.33920569,0.84737983],"xyz":[-0.0253097718,-2.2499569975,4.9971831166],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33920569,0.84737983,0.58834225],"xyz":[-1.9358640172,1.1468981811,4.9971831166],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66079431,0.15262017,0.41165775],"xyz":[1.9358650172,-1.1468981811,3.4491038834],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41165775,0.66079431,0.15262017],"xyz":[0.0253107718,2.2499569975,3.4491038834],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.84737983,0.58834225,0.33920569],"xyz":[1.9611755639,1.1030588164,4.9971831166],"label":"N","properties":{}}]},"65":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[1.739255,-2.701998,0.0],[1.739255,2.701998,0.0],[0.0,0.0,44.970811]],"pbc":[true,true,true],"a":3.2133784631,"b":3.2133784631,"c":44.970811,"alpha":90.0,"beta":90.0,"gamma":114.4618654814,"volume":422.6773725521},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.65303539,0.34696461,0.05235786],"xyz":[1.739255,-0.8270026354,2.3545754264],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.34696461,0.65303539,0.55235786],"xyz":[1.739255,0.8270026354,24.8399809264],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.01589023,0.98410977,0.10015629],"xyz":[1.739255,2.6161272606,4.5041095881],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.98410977,0.01589023,0.60015629],"xyz":[1.739255,-2.6161272606,26.9895150881],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.65177435,0.34822565,0.14624567],"xyz":[1.739255,-0.8201879803,6.5767863851],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.34822565,0.65177435,0.64624567],"xyz":[1.739255,0.8201879803,29.0621918851],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.06378092,0.93621908,0.26386996],"xyz":[1.739255,2.3573261634,11.8664460997],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.93621908,0.06378092,0.76386996],"xyz":[1.739255,-2.3573261634,34.3518515997],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.70119409,0.29880591,0.30755386],"xyz":[1.739255,-1.0872520576,13.8309465104],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.29880591,0.70119409,0.80755386],"xyz":[1.739255,1.0872520576,36.3163520104],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.97953586,0.02046414,0.41091222],"xyz":[1.739255,-2.5914098693,18.4790557832],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.02046414,0.97953586,0.91091222],"xyz":[1.739255,2.5914098693,40.9644612832],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.6395319,0.3604681,0.46581246],"xyz":[1.739255,-0.7540298295,20.9479641001],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.3604681,0.6395319,0.96581246],"xyz":[1.739255,0.7540298295,43.4333696001],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.00687154,0.99312846,0.00904892],"xyz":[1.739255,2.6648642253,0.4069372711],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.99312846,0.00687154,0.50904892],"xyz":[1.739255,-2.6648642253,22.8923427711],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.71355352,0.28644648,0.21967736],"xyz":[1.739255,-1.1540423679,9.8790690375],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.28644648,0.71355352,0.71967736],"xyz":[1.739255,1.1540423679,32.3644745375],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.08167077,0.91832923,0.35281686],"xyz":[1.739255,2.2606494856,15.8664603287],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.91832923,0.08167077,0.85281686],"xyz":[1.739255,-2.2606494856,38.3518658287],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66270201,0.33729799,0.09953666],"xyz":[1.739255,-0.8792410112,4.4762443244],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33729799,0.66270201,0.59953666],"xyz":[1.739255,0.8792410112,26.9616498244],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0026691,0.9973309,0.1493108],"xyz":[1.739255,2.6875741943,6.7146277671],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.9973309,0.0026691,0.6493108],"xyz":[1.739255,-2.6875741943,29.2000332671],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62990179,0.37009821,0.4228011],"xyz":[1.739255,-0.7019887536,19.0137083587],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37009821,0.62990179,0.9228011],"xyz":[1.739255,0.7019887536,41.4991138587],"label":"N","properties":{}}]},"25":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[7.625926,0.0,0.076043],[0.0,7.580728,0.0],[3.767819,3.790364,3.834359]],"pbc":[true,true,true],"a":7.6263051273,"b":7.580728,"c":6.5776613025,"alpha":54.8129244902,"beta":54.6475473746,"gamma":90.0,"volume":219.4925632504},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[3.812963,3.790364,0.0380215],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5,0.0,0.0],"xyz":[3.812963,0.0,0.0380215],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.5,0.0],"xyz":[0.0,3.790364,0.0],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[5.6968725,5.685546,1.955201],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[5.6968725,1.895182,1.955201],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[1.8839095,1.895182,1.9171795],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[1.8839095,5.685546,1.9171795],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17462695,0.86728018,0.65081407],"xyz":[3.7838418167,9.041437366,2.5087339438],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82537305,0.51809424,0.34918593],"xyz":[7.6099031833,5.2510732902,1.4016680562],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82537305,0.13271982,0.34918593],"xyz":[7.6099031833,2.329654634,1.4016680562],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17462695,0.48190576,0.65081407],"xyz":[3.7838418167,6.1200187098,2.5087339438],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.50337766,0.68510006,0.62979988],"xyz":[6.2116927393,7.580728,2.4531571855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.49662234,0.31489994,0.37020012],"xyz":[5.1820522607,3.790364,1.4572448145],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.86607696,0.69069681,0.61860638],"xyz":[8.9354356794,7.580728,2.4378180309],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.13392304,0.30930319,0.38139362],"xyz":[2.4583093206,3.790364,1.4725839691],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68829538,0.82298879,0.99962863],"xyz":[9.0153093791,10.0278105366,3.8852750797],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31170462,0.82261742,0.00037137],"xyz":[2.3784356209,6.2374465366,0.0251269203],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31170462,0.17701121,0.00037137],"xyz":[2.3784356209,1.3432814634,0.0251269203],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68829538,0.17738258,0.99962863],"xyz":[9.0153093791,5.1336454634,3.8852750797],"label":"N","properties":{}}]},"23":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.889034,-4.949055,0.0],[2.889034,4.949055,0.0],[0.0,0.0,10.531082]],"pbc":[true,true,true],"a":5.7305900958,"b":5.7305900958,"c":10.531082,"alpha":90.0,"beta":90.0,"gamma":119.4511081359,"volume":301.1465715564},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.9490353,0.0509647,0.16283211],"xyz":[2.889034,-4.4446007933,1.7147983026],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5509647,0.4490353,0.66283211],"xyz":[2.889034,-0.5044542067,6.9803393026],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.4490353,0.5509647,0.33716789],"xyz":[2.889034,0.5044542067,3.5507426974],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0509647,0.9490353,0.83716789],"xyz":[2.889034,4.4446007933,8.8162836974],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.63746097,0.36253903,0.10209048],"xyz":[2.889034,-1.3606038018,1.0751232163],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.86253903,0.13746097,0.60209048],"xyz":[2.889034,-3.5884511982,6.3406642163],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.13746097,0.86253903,0.39790952],"xyz":[2.889034,3.5884511982,4.1904177837],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.36253903,0.63746097,0.89790952],"xyz":[2.889034,1.3606038018,9.4559587837],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.75230031,0.24769969,0.35600488],"xyz":[2.889034,-2.4972962214,3.7491165837],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.74769969,0.25230031,0.85600488],"xyz":[2.889034,-2.4517587786,9.0146575837],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.25230031,0.74769969,0.14399512],"xyz":[2.889034,2.4517587786,1.5164244163],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.24769969,0.75230031,0.64399512],"xyz":[2.889034,2.4972962214,6.7819654163],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.67082105,0.32917895,0.51925674],"xyz":[2.889034,-1.6908055432,5.468335308],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82917895,0.17082105,0.01925674],"xyz":[2.889034,-3.2582494568,0.202794308],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17082105,0.82917895,0.98074326],"xyz":[2.889034,3.2582494568,10.328287692],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.32917895,0.67082105,0.48074326],"xyz":[2.889034,1.6908055432,5.062746692],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.94589238,0.05410762,0.35185694],"xyz":[2.889034,-4.4134918254,3.7054342874],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55410762,0.44589238,0.85185694],"xyz":[2.889034,-0.5355631746,8.9709752874],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44589238,0.55410762,0.14814306],"xyz":[2.889034,0.5355631746,1.5601067126],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.05410762,0.94589238,0.64814306],"xyz":[2.889034,4.4134918254,6.8256477126],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.93929385,0.56070615,0.25],"xyz":[4.333551,-1.8736513496,2.6327705],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.56070615,0.93929385,0.75],"xyz":[4.333551,1.8736513496,7.8983115],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.43929385,0.06070615,0.25],"xyz":[1.444517,-1.8736513496,2.6327705],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.06070615,0.43929385,0.75],"xyz":[1.444517,1.8736513496,7.8983115],"label":"N","properties":{}}]},"24":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.275648,-3.88791,0.0],[4.275648,3.88791,0.0],[0.0,0.0,4.969047]],"pbc":[true,true,true],"a":5.7790146209,"b":5.7790146209,"c":4.969047,"alpha":90.0,"beta":90.0,"gamma":84.5614233138,"volume":165.2042620041},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.40001196,0.59998804,0.25],"xyz":[4.275648,0.7774890012,1.24226175],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.59998804,0.40001196,0.75],"xyz":[4.275648,-0.7774890012,3.72678525],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.83644128,0.83644128,0.0],"xyz":[7.1526569719,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.16355872,0.16355872,0.5],"xyz":[1.3986390281,0.0,2.4845235],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.83644128,0.83644128,0.5],"xyz":[7.1526569719,0.0,2.4845235],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.16355872,0.16355872,0.0],"xyz":[1.3986390281,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.89385404,0.10614596,0.25],"xyz":[4.275648,-3.0625381213,1.24226175],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.10614596,0.89385404,0.75],"xyz":[4.275648,3.0625381213,3.72678525],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71612659,0.59086281,0.25],"xyz":[5.5882266141,-0.4870143029,1.24226175],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28387341,0.40913719,0.75],"xyz":[2.9630693859,0.4870143029,3.72678525],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.59086281,0.71612659,0.75],"xyz":[5.5882266141,0.4870143029,3.72678525],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.40913719,0.28387341,0.25],"xyz":[2.9630693859,-0.4870143029,1.24226175],"label":"N","properties":{}}]},"15":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[1.887732,-8.293794,0.0],[1.887732,8.293794,0.0],[0.0,0.0,10.903555]],"pbc":[true,true,true],"a":8.5059127093,"b":8.5059127093,"c":10.903555,"alpha":90.0,"beta":90.0,"gamma":154.3549625935,"volume":341.4221527405},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.77771064,0.22228936,0.25],"xyz":[1.887732,-4.6065496795,2.72588875],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.22228936,0.77771064,0.75],"xyz":[1.887732,4.6065496795,8.17766625],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.76640818,0.23359182,0.58357468],"xyz":[1.887732,-4.4190691297,6.36303862],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.23359182,0.76640818,0.08357468],"xyz":[1.887732,4.4190691297,0.91126112],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.23359182,0.76640818,0.41642532],"xyz":[1.887732,4.4190691297,4.54051638],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.76640818,0.23359182,0.91642532],"xyz":[1.887732,-4.4190691297,9.99229388],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31288974,0.68711026,0.25],"xyz":[1.887732,3.1037079035,2.72588875],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68711026,0.31288974,0.75],"xyz":[1.887732,-3.1037079035,8.17766625],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00945486,0.99054514,0.19890372],"xyz":[1.887732,8.1369606777,2.1687576507],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99054514,0.00945486,0.69890372],"xyz":[1.887732,-8.1369606777,7.6205351507],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99054514,0.00945486,0.80109628],"xyz":[1.887732,-8.1369606777,8.7347973493],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00945486,0.99054514,0.30109628],"xyz":[1.887732,8.1369606777,3.2830198493],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71261595,0.28738405,0.10220736],"xyz":[1.887732,-3.5267857808,1.1144235712],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28738405,0.71261595,0.60220736],"xyz":[1.887732,3.5267857808,6.5662010712],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28738405,0.71261595,0.89779264],"xyz":[1.887732,3.5267857808,9.7891314288],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71261595,0.28738405,0.39779264],"xyz":[1.887732,-3.5267857808,4.3373539288],"label":"N","properties":{}}]},"18":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.730114,-1.576232,0.0],[0.0,3.152464,0.0],[0.0,0.0,11.873833]],"pbc":[true,true,true],"a":3.1524640792,"b":3.152464,"c":11.873833,"alpha":90.0,"beta":90.0,"gamma":119.9999991686,"volume":102.1931660622},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.0,0.28482879],"xyz":[0.0,0.0,3.3820094861],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.0,0.71517121],"xyz":[0.0,0.0,8.4918235139],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33333333,0.66666667,0.33039369],"xyz":[0.9100379909,1.5762320158,3.9230394993],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66666667,0.33333333,0.66960631],"xyz":[1.8200760091,-0.0000000158,7.9507935007],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66666667,0.33333333,0.08508663],"xyz":[1.8200760091,-0.0000000158,1.0103044352],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.33333333,0.66666667,0.91491337],"xyz":[0.9100379909,1.5762320158,10.8635285648],"label":"Zn","properties":{}}]},"38":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[-4.2267,-4.2267,0.0],[-4.2267,0.0,-4.2267],[0.0,-4.2267,-4.2267]],"pbc":[true,true,true],"a":5.9774564641,"b":5.9774564641,"c":5.9774564641,"alpha":60.0,"beta":60.0,"gamma":60.0,"volume":151.0199308963},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.875,0.875,0.875],"xyz":[-7.396725,-7.396725,-7.396725],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.125,0.125,0.125],"xyz":[-1.056675,-1.056675,-1.056675],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.625,0.625,0.625],"xyz":[-5.283375,-5.283375,-5.283375],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.375,0.375,0.375],"xyz":[-3.170025,-3.170025,-3.170025],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.0],"xyz":[-2.11335,0.0,-2.11335],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.0,0.0],"xyz":[-2.11335,-2.11335,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[0.0,-2.11335,-2.11335],"label":"N","properties":{}}]},"8":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[7.6852,0.0,0.0],[0.0,7.6852,0.0],[0.0,0.0,7.6852]],"pbc":[true,true,true],"a":7.6852,"b":7.6852,"c":7.6852,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":453.9055805822},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.00179104,0.00179104,0.00179104],"xyz":[0.0137645006,0.0137645006,0.0137645006],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.49820896,0.99820896,0.50179104],"xyz":[3.8288354994,7.6714354994,3.8563645006],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.50179104,0.49820896,0.99820896],"xyz":[3.8563645006,3.8288354994,7.6714354994],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.99820896,0.50179104,0.49820896],"xyz":[7.6714354994,3.8563645006,3.8288354994],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.47336587,0.47336587,0.47336587],"xyz":[3.6379113841,3.6379113841,3.6379113841],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.02663413,0.52663413,0.97336587],"xyz":[0.2046886159,4.0472886159,7.4805113841],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.97336587,0.02663413,0.52663413],"xyz":[7.4805113841,0.2046886159,4.0472886159],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.52663413,0.97336587,0.02663413],"xyz":[4.0472886159,7.4805113841,0.2046886159],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.29008367,0.29008367,0.29008367],"xyz":[2.2293510207,2.2293510207,2.2293510207],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.20991633,0.70991633,0.79008367],"xyz":[1.6132489793,5.4558489793,6.0719510207],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.79008367,0.20991633,0.70991633],"xyz":[6.0719510207,1.6132489793,5.4558489793],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.70991633,0.79008367,0.20991633],"xyz":[5.4558489793,6.0719510207,1.6132489793],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75881592,0.75881592,0.75881592],"xyz":[5.8316521084,5.8316521084,5.8316521084],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.74118408,0.24118408,0.25881592],"xyz":[5.6961478916,1.8535478916,1.9890521084],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25881592,0.74118408,0.24118408],"xyz":[1.9890521084,5.6961478916,1.8535478916],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.24118408,0.25881592,0.74118408],"xyz":[1.8535478916,1.9890521084,5.6961478916],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.23092657,0.11049583,0.08125003],"xyz":[1.7747168758,0.8491825527,0.6244227306],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41874997,0.76907343,0.61049583],"xyz":[3.2181772694,5.9104831242,4.6917825527],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58125003,0.26907343,0.88950417],"xyz":[4.4670227306,2.0678831242,6.8360174473],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.91874997,0.73092657,0.38950417],"xyz":[7.0607772694,5.6173168758,2.9934174473],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.11049583,0.08125003,0.23092657],"xyz":[0.8491825527,0.6244227306,1.7747168758],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.38950417,0.91874997,0.73092657],"xyz":[2.9934174473,7.0607772694,5.6173168758],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.76907343,0.61049583,0.41874997],"xyz":[5.9104831242,4.6917825527,3.2181772694],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.08125003,0.23092657,0.11049583],"xyz":[0.6244227306,1.7747168758,0.8491825527],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26907343,0.88950417,0.58125003],"xyz":[2.0678831242,6.8360174473,4.4670227306],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.73092657,0.38950417,0.91874997],"xyz":[5.6173168758,2.9934174473,7.0607772694],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.61049583,0.41874997,0.76907343],"xyz":[4.6917825527,3.2181772694,5.9104831242],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.88950417,0.58125003,0.26907343],"xyz":[6.8360174473,4.4670227306,2.0678831242],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75939082,0.03937817,0.09224158],"xyz":[5.8360703299,0.3026291121,0.7088949906],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.40775842,0.24060918,0.53937817],"xyz":[3.1337050094,1.8491296701,4.1452291121],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.59224158,0.74060918,0.96062183],"xyz":[4.5514949906,5.6917296701,7.3825708879],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.90775842,0.25939082,0.46062183],"xyz":[6.9763050094,1.9934703299,3.5399708879],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.03937817,0.09224158,0.75939082],"xyz":[0.3026291121,0.7088949906,5.8360703299],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.46062183,0.90775842,0.25939082],"xyz":[3.5399708879,6.9763050094,1.9934703299],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24060918,0.53937817,0.40775842],"xyz":[1.8491296701,4.1452291121,3.1337050094],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.09224158,0.75939082,0.03937817],"xyz":[0.7088949906,5.8360703299,0.3026291121],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.74060918,0.96062183,0.59224158],"xyz":[5.6917296701,7.3825708879,4.5514949906],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25939082,0.46062183,0.90775842],"xyz":[1.9934703299,3.5399708879,6.9763050094],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.53937817,0.40775842,0.24060918],"xyz":[4.1452291121,3.1337050094,1.8491296701],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.96062183,0.59224158,0.74060918],"xyz":[7.3825708879,4.5514949906,5.6917296701],"label":"N","properties":{}}]},"36":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.058315,-4.469731,0.0],[3.058315,4.469731,0.0],[0.0,0.0,6.091423]],"pbc":[true,true,true],"a":5.4158827398,"b":5.4158827398,"c":6.091423,"alpha":90.0,"beta":90.0,"gamma":111.2379485004,"volume":166.5376209045},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[0.0,0.0,3.0457115],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.61502096,0.38497904,0.25],"xyz":[3.058315,-1.0282255011,1.52285575],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.38497904,0.61502096,0.75],"xyz":[3.058315,1.0282255011,4.56856725],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.77707723,0.22292277,0.02604294],"xyz":[3.058315,-2.4769213687,0.1586385637],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.22292277,0.77707723,0.52604294],"xyz":[3.058315,2.4769213687,3.2043500637],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.22292277,0.77707723,0.97395706],"xyz":[3.058315,2.4769213687,5.9327844363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.77707723,0.22292277,0.47395706],"xyz":[3.058315,-2.4769213687,2.8870729363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.79819076,0.7634284,0.25],"xyz":[4.7759233013,-0.1553783981,1.52285575],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.20180924,0.2365716,0.75],"xyz":[1.3407066987,0.1553783981,4.56856725],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7634284,0.79819076,0.75],"xyz":[4.7759233013,0.1553783981,4.56856725],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2365716,0.20180924,0.25],"xyz":[1.3407066987,-0.1553783981,1.52285575],"label":"N","properties":{}}]},"43":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.443685,-1.410862,0.0],[0.0,2.821725,0.0],[0.0,0.0,4.305149]],"pbc":[true,true,true],"a":2.8217242888,"b":2.821725,"c":4.305149,"alpha":90.0,"beta":90.0,"gamma":119.9999966138,"volume":29.6857547944},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.33333333,0.66666667,0.75],"xyz":[0.8145616585,1.4108626808,3.22886175],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66666667,0.33333333,0.25],"xyz":[1.6291233415,0.0000003192,1.07628725],"label":"Zn","properties":{}}]},"1":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.800434,-1.616831,0.0],[0.0,3.233663,0.0],[0.0,0.0,5.166609]],"pbc":[true,true,true],"a":3.2336624856,"b":3.233663,"c":5.166609,"alpha":90.0,"beta":90.0,"gamma":119.9999950322,"volume":46.787053474},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.33333333,0.66666667,0.75],"xyz":[0.9334779907,1.6168316828,3.87495675],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.66666667,0.33333333,0.25],"xyz":[1.8669560093,0.0000003172,1.29165225],"label":"Zr","properties":{}}]},"22":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.503549,-2.105416,0.30612],[5.503549,2.105416,0.30612],[-3.212949,0.0,5.665865]],"pbc":[true,true,true],"a":5.900469268,"b":5.900469268,"c":6.5134528074,"alpha":114.5172354874,"beta":114.5172354874,"gamma":41.8102779978,"volume":135.4452583078},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.33909577,0.33909577,0.8882145],"xyz":[0.8786724822,0.0,5.2401114423],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.66090423,0.66090423,0.1117855],"xyz":[6.9154765178,0.0,1.0379935577],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.01117193,0.01117193,0.73206145],"xyz":[-2.2291055754,0.0,4.1546012498],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.98882807,0.98882807,0.26793855],"xyz":[10.0232545754,0.0,2.1235037502],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.33875302,0.33875302,0.40873122],"xyz":[2.4154551244,0.0,2.5232140628],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66124698,0.66124698,0.59126878],"xyz":[5.3786938756,0.0,3.7548909372],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51840336,0.51840336,0.23739812],"xyz":[4.9433685348,0.0,1.6624529723],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48159664,0.48159664,0.76260188],"xyz":[2.8507804652,0.0,4.6156520277],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.1570763,0.1570763,0.59729982],"xyz":[-0.1901396318,0.0,3.4803885386],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.8429237,0.8429237,0.40270018],"xyz":[7.9842886318,0.0,2.7977164614],"label":"N","properties":{}}]},"10":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[7.932667,-1.614529,0.519404],[7.932667,1.614529,0.519404],[-3.354285,0.0,6.743572]],"pbc":[true,true,true],"a":8.1119473704,"b":8.1119473704,"c":7.5317322828,"alpha":112.2211128748,"beta":112.2211128748,"gamma":22.9606005961,"volume":178.3626375547},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.72571673,0.72571673,0.20605258],"xyz":[10.8225792325,0.0,2.1434107539],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.27428327,0.27428327,0.79394742],"xyz":[1.6884697675,0.0,5.6389692461],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.88941755,0.88941755,0.6236523],"xyz":[12.0189989411,0.0,5.1295782543],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.11058245,0.11058245,0.3763477],"xyz":[0.4920500589,0.0,2.6528017457],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.59020144,0.59020144,0.70963199],"xyz":[6.9834350333,0.0,5.3985603956],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.40979856,0.40979856,0.29036801],"xyz":[5.5276139667,0.0,2.3838196044],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85546464,0.85546464,0.3492377],"xyz":[12.4007894602,0.0,3.2437730868],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14453536,0.14453536,0.6507623],"xyz":[0.1102595398,0.0,4.5386069132],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51240013,0.51240013,0.21277716],"xyz":[7.415683968,0.0,1.9671634527],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48759987,0.48759987,0.78722284],"xyz":[5.095365032,0.0,5.8152165473],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.8471077,0.8471077,0.84881876],"xyz":[10.5924665601,0.0,6.6040526786],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.1528923,0.1528923,0.15118124],"xyz":[1.9185824399,0.0,1.1783273214],"label":"N","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zr","properties":{}}]},"70":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.890752,-2.823677,0.0],[0.0,5.647354,0.0],[0.0,0.0,6.428382]],"pbc":[true,true,true],"a":5.6473539756,"b":5.647354,"c":6.428382,"alpha":90.0,"beta":90.0,"gamma":120.0000001429,"volume":177.5506757563},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.33333333,0.66666667,0.62486757],"xyz":[1.6302506504,2.8236770282,4.0168874394],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.66666667,0.33333333,0.12486757],"xyz":[3.2605013496,-0.0000000282,0.8026964394],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.04179757],"xyz":[0.0,0.0,0.2686907466],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.54179757],"xyz":[0.0,0.0,3.4828817466],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.33333333,0.66666667,0.02173231],"xyz":[1.6302506504,2.8236770282,0.1397035904],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66666667,0.33333333,0.52173231],"xyz":[3.2605013496,-0.0000000282,3.3538945904],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33333333,0.66666667,0.30226121],"xyz":[1.6302506504,2.8236770282,1.9430505217],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66666667,0.33333333,0.80226121],"xyz":[3.2605013496,-0.0000000282,5.1572415217],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.16316165,0.32632331,0.82311378],"xyz":[0.7979831661,1.3821474516,5.2912898073],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.83683835,0.67367669,0.32311378],"xyz":[4.0927688339,1.4415295484,2.0770988073],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.32632331,0.16316165,0.32311378],"xyz":[1.595966381,-0.0000000282,2.0770988073],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.83683835,0.16316165,0.32311378],"xyz":[4.0927688339,-1.4415296048,2.0770988073],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.16316165,0.83683835,0.82311378],"xyz":[0.7979831661,4.2652066048,5.2912898073],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.67367669,0.83683835,0.82311378],"xyz":[3.294785619,2.8236770282,5.2912898073],"label":"N","properties":{}}]},"2":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.813812,-2.779256,0.0],[0.0,5.558512,0.0],[0.0,0.0,3.745624]],"pbc":[true,true,true],"a":5.558511481,"b":5.558512,"c":3.745624,"alpha":90.0,"beta":90.0,"gamma":120.0000030884,"volume":100.2240277324},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.33333333,0.66666667,0.5],"xyz":[1.604603984,2.7792560278,1.872812],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66666667,0.33333333,0.5],"xyz":[3.209208016,-0.0000000278,1.872812],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41946521,0.0,0.12157999],"xyz":[2.0192266615,-1.1658012017,0.4553929285],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58053479,1.0,0.87842001],"xyz":[2.7945853385,3.9450572017,3.2902310715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.41946521,0.12157999],"xyz":[0.0,2.3316024034,0.4553929285],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58053479,0.58053479,0.12157999],"xyz":[2.7945853385,1.6134547983,0.4553929285],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41946521,0.41946521,0.87842001],"xyz":[2.0192266615,1.1658012017,3.2902310715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.58053479,0.87842001],"xyz":[0.0,3.2269095966,3.2902310715],"label":"N","properties":{}}]},"35":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.103714,0.0,-0.700673],[0.0,12.972733,0.0],[-0.424296,0.0,6.461036]],"pbc":[true,true,true],"a":4.1631011574,"b":12.972733,"c":6.4749527635,"alpha":90.0,"beta":103.4465312358,"gamma":90.0,"volume":340.1055071678},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.0328983,0.25,0.13910651],"xyz":[0.0759828785,3.24318325,0.8757212184],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.9671017,0.75,0.86089349],"xyz":[3.6034351215,9.72954975,4.8846417816],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.40925565,0.04150102,0.79236623],"xyz":[1.3432703186,0.5383816517,4.8327523532],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.59074435,0.95849898,0.20763377],"xyz":[2.3361476814,12.4343513483,0.9276106468],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.59074435,0.54150102,0.20763377],"xyz":[2.3361476814,7.0247481517,0.9276106468],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.40925565,0.45849898,0.79236623],"xyz":[1.3432703186,5.9479848483,4.8327523532],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87785521,0.97059168,0.98812405],"xyz":[3.1832096333,12.5912267167,5.769215616],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12214479,0.02940832,0.01187595],"xyz":[0.4962083667,0.3815062833,-0.008852616],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12214479,0.47059168,0.01187595],"xyz":[0.4962083667,6.1048602167,-0.008852616],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87785521,0.52940832,0.98812405],"xyz":[3.1832096333,6.8678727833,5.769215616],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.79856089,0.41140412,0.3761211],"xyz":[3.1174788259,5.3370358039,1.870601913],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.20143911,0.58859588,0.6238789],"xyz":[0.5619391741,7.6356971961,3.889761087],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.20143911,0.91140412,0.6238789],"xyz":[0.5619391741,11.8234023039,3.889761087],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.79856089,0.08859588,0.3761211],"xyz":[3.1174788259,1.1493306961,1.870601913],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28692864,0.84017359,0.21926568],"xyz":[1.084439526,10.8993476567,1.2156403011],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71307136,0.15982641,0.78073432],"xyz":[2.594978474,2.0733853433,4.5447226989],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71307136,0.34017359,0.78073432],"xyz":[2.594978474,4.4129811567,4.5447226989],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28692864,0.65982641,0.21926568],"xyz":[1.084439526,8.5597518433,1.2156403011],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92927501,0.88310609,0.58519048],"xyz":[3.5651848885,11.4562995162,3.1298188491],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07072499,0.11689391,0.41480952],"xyz":[0.1142331115,1.5164334838,2.6305441509],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07072499,0.38310609,0.41480952],"xyz":[0.1142331115,4.9699330162,2.6305441509],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92927501,0.61689391,0.58519048],"xyz":[3.5651848885,8.0027999838,3.1298188491],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.49121727,0.25,0.1538523],"xyz":[1.9505362725,3.24318325,0.6498625708],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.50878273,0.75,0.8461477],"xyz":[1.7288817275,9.72954975,5.1105004292],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.35117108,0.75,0.24759333],"xyz":[1.3360528178,9.72954975,1.3536533244],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.64882892,0.25,0.75240667],"xyz":[2.3433651822,3.24318325,4.4067096756],"label":"N","properties":{}}]},"9":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.56123,0.0,0.098238],[0.0,6.060726,0.0],[-2.983057,0.0,5.510293]],"pbc":[true,true,true],"a":6.5619653929,"b":6.060726,"c":6.2659363236,"alpha":90.0,"beta":117.5715836392,"gamma":90.0,"volume":220.897397497},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.16989291,0.87830687,0.43646054],"xyz":[-0.1872802112,5.323177283,2.421715398],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.83010709,0.12169313,0.56353946],"xyz":[3.7654532112,0.737548717,3.186815602],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.83010709,0.37830687,0.06353946],"xyz":[5.2569817112,2.292814283,0.431669102],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.16989291,0.62169313,0.93646054],"xyz":[-1.6788087112,3.767911717,5.176861898],"label":"Zn","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.32449651,0.11021715,0.07651784],"xyz":[1.9008391581,0.6679959467,0.4535136063],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.67550349,0.88978285,0.92348216],"xyz":[1.6773338419,5.3927300533,5.1550173937],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.67550349,0.61021715,0.42348216],"xyz":[3.1688623419,3.6983589467,2.3998708937],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.32449651,0.38978285,0.57651784],"xyz":[0.4093106581,2.3623670533,3.2086601063],"label":"Zr","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37508238,0.40328558,0.26426987],"xyz":[1.6726696785,2.4442034001,1.4930517576],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62491762,0.59671442,0.73573013],"xyz":[1.9055033215,3.6165225999,4.1154792424],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62491762,0.90328558,0.23573013],"xyz":[3.3970318215,5.4745664001,1.3603327424],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37508238,0.09671442,0.76426987],"xyz":[0.1811411785,0.5861595999,4.2481982576],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[-1.4915285,3.030363,2.7551465],"label":"N","properties":{}}]},"52":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.850647,-4.711321,-0.214326],[4.850647,4.711321,-0.214326],[-0.377966,0.0,5.614459]],"pbc":[true,true,true],"a":6.7654458477,"b":6.7654458477,"c":5.6271669746,"alpha":94.5750991688,"beta":94.5750991688,"gamma":88.2745710295,"volume":255.8506497649},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.93947997,0.24500985,0.59229075],"xyz":[5.5216762263,-3.2718716602,3.0715251668],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75499015,0.06052003,0.90770925],"xyz":[3.6126687737,-3.2718716602,4.9215113332],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.06052003,0.75499015,0.40770925],"xyz":[3.8016517737,3.2718716602,2.1142818332],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.24500985,0.93947997,0.09229075],"xyz":[5.7106592263,3.2718716602,0.2642956668],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.65515963,0.34484037,0.25],"xyz":[4.7561555,-1.4620136463,1.18928875],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.34484037,0.65515963,0.75],"xyz":[4.5671725,1.4620136463,3.99651825],"label":"Zn","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.18630163,0.38379918,0.12077952],"xyz":[2.7197072317,0.9304743548,0.5559242369],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.61620082,0.81369837,0.37922048],"xyz":[6.7926037683,0.9304743548,1.8226532631],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.81369837,0.61620082,0.87922048],"xyz":[6.6036207683,-0.9304743548,4.6298827631],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.38379918,0.18630163,0.62077952],"xyz":[2.5307242317,-0.9304743548,3.3631537369],"label":"Zr","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.88219627,0.3291432,0.00176296],"xyz":[5.8751138272,-2.6056105428,-0.2497234766],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6708568,0.11780373,0.49823704],"xyz":[3.6371971728,-2.6056105428,2.6283009766],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.11780373,0.6708568,0.99823704],"xyz":[3.4482141728,2.6056105428,5.4355304766],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3291432,0.88219627,0.50176296],"xyz":[5.6861308272,2.6056105428,2.5575060234],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24930985,0.44271839,0.48301702],"xyz":[3.1742206953,0.9112097161,2.5635596105],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55728161,0.75069015,0.01698298],"xyz":[6.3380903047,0.9112097161,-0.1849821105],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75069015,0.55728161,0.51698298],"xyz":[6.1491073047,-0.9112097161,2.6222473895],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44271839,0.24930985,0.98301702],"xyz":[2.9852376953,-0.9112097161,5.3707891105],"label":"N","properties":{}}]},"14":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.131598,-3.23494,0.226503],[6.131598,3.23494,0.226503],[0.246773,0.0,5.643709]],"pbc":[true,true,true],"a":6.9363271582,"b":6.9363271582,"c":5.6491015383,"alpha":85.9148460546,"beta":85.9148460546,"gamma":55.5986867097,"volume":223.5282722621},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.00267917,0.27212232,0.25091105],"xyz":[1.746890339,0.8716324237,1.478312313],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.27212232,0.00267917,0.75091105],"xyz":[1.870276839,-0.8716324237,4.300166813],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.53639722,0.15487041,0.20074018],"xyz":[4.288112474,-1.2342163387,1.2894933525],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.15487041,0.53639722,0.70074018],"xyz":[4.411498974,1.2342163387,4.1113478525],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.41162369,0.66084098,0.29113314],"xyz":[6.647766024,0.8062029801,1.8859871876],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66084098,0.41162369,0.79113314],"xyz":[6.771152524,-0.8062029801,4.7078416876],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3019467,0.26792173,0.9444768],"xyz":[3.727275499,-0.1100687365,5.4594291255],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26792173,0.3019467,0.4444768],"xyz":[3.603888999,0.1100687365,2.6375746255],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.84479035,0.67122354,0.09235619],"xyz":[9.31837875,-0.5614782163,0.8646131548],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.67122354,0.84479035,0.59235619],"xyz":[9.44176525,0.5614782163,3.6864676548],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.890775,0.81130119,0.05351553],"xyz":[10.4496531503,-0.2570930069,0.6875514416],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.81130119,0.890775,0.55351553],"xyz":[10.5730396503,0.2570930069,3.5094059416],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.22233666,0.95259651,0.11785524],"xyz":[7.2333013664,2.3623467992,0.9312665665],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.95259651,0.22233666,0.61785524],"xyz":[7.3566878664,-2.3623467992,3.7531210665],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36334386,0.66043067,0.64751187],"xyz":[6.4371623073,0.9610580051,3.8862565707],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66043067,0.36334386,0.14751187],"xyz":[6.3137758073,-0.9610580051,1.0644020707],"label":"N","properties":{}}]},"11":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[8.161179,0.0,0.449837],[0.0,3.324704,0.0],[-2.371431,0.0,9.27092]],"pbc":[true,true,true],"a":8.1735669078,"b":3.324704,"c":9.5694118228,"alpha":90.0,"beta":101.1932731649,"gamma":90.0,"volume":255.0992018413},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.94849747,0.25,0.32956364],"xyz":[6.9593202013,0.831176,3.4820273978],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.05150253,0.75,0.67043636],"xyz":[-1.1695722013,2.493528,6.2387296022],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.1810685,0.25,0.03690071],"xyz":[1.3902249521,0.831176,0.4235548412],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.8189315,0.75,0.96309929],"xyz":[4.3995230479,2.493528,9.2972021588],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.67614681,0.25,0.61333077],"xyz":[4.0636835455,0.831176,5.9902963548],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.32385319,0.75,0.38666923],"xyz":[1.7260644545,2.493528,3.7304606452],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.53082596,0.25,0.1265889],"xyz":[4.0319688357,0.831176,1.4123807222],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.46917404,0.75,0.8734111],"xyz":[1.7577791643,2.493528,8.3083762778],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92053932,0.25,0.58165729],"xyz":[6.1333260382,0.831176,5.8065908491],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07946068,0.75,0.41834271],"xyz":[-0.3435780382,2.493528,3.9141661509],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.30285053,0.25,0.68482012],"xyz":[0.8476137236,0.831176,6.4851459208],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.69714947,0.75,0.31517988],"xyz":[4.9421342764,2.493528,3.2356110792],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.9485379,0.25,0.11106725],"xyz":[7.4777992704,0.831176,1.4563830327],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0514621,0.75,0.88893275],"xyz":[-1.6880512704,2.493528,8.2643739673],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6355139,0.25,0.9534327],"xyz":[2.9255428337,0.831176,9.1250759533],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3644861,0.75,0.0465673],"xyz":[2.8642051663,2.493528,0.5956810467],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37209085,0.25,0.5785174],"xyz":[1.6647859347,0.831176,5.5307687657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62790915,0.75,0.4214826],"xyz":[4.1249620653,2.493528,4.1899882343],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.29515767,0.25,0.2647115],"xyz":[1.7810895209,0.831176,2.5868919804],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.70484233,0.75,0.7352885],"xyz":[4.0086584791,2.493528,7.1338650196],"label":"N","properties":{}}]},"27":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.24056,0.0,0.0],[0.0,12.886769,0.0],[0.0,0.0,7.790818]],"pbc":[true,true,true],"a":3.24056,"b":12.886769,"c":7.790818,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":325.3472720583},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.75,0.55699214],"xyz":[0.81014,9.66507675,4.3394243902],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.25,0.44300786],"xyz":[2.43042,3.22169225,3.4513936098],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.75,0.16926273],"xyz":[0.81014,9.66507675,1.3186951236],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.25,0.83073727],"xyz":[2.43042,3.22169225,6.4721228764],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.44772047,0.15767431],"xyz":[0.81014,5.7696702735,1.2284118525],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.94772047,0.84232569],"xyz":[2.43042,12.2130547735,6.5624061475],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.55227953,0.84232569],"xyz":[2.43042,7.1170987265,6.5624061475],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.05227953,0.15767431],"xyz":[0.81014,0.6737142265,1.2284118525],"label":"Zr","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.60748537,0.68873064],"xyz":[0.81014,7.8285236341,5.3657750673],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.10748537,0.31126936],"xyz":[2.43042,1.3851391341,2.4250429327],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.39251463,0.31126936],"xyz":[2.43042,5.0582453659,2.4250429327],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.89251463,0.68873064],"xyz":[0.81014,11.5016298659,5.3657750673],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.59581971,0.05569449],"xyz":[0.81014,7.6781909684,0.4339056352],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.09581971,0.94430551],"xyz":[2.43042,1.2348064684,7.3569123648],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.40418029,0.94430551],"xyz":[2.43042,5.2085780316,7.3569123648],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.90418029,0.05569449],"xyz":[0.81014,11.6519625316,0.4339056352],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.25,0.64078793],"xyz":[0.81014,3.22169225,4.9922621392],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.75,0.35921207],"xyz":[2.43042,9.66507675,2.7985558608],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25,0.25,0.13097308],"xyz":[0.81014,3.22169225,1.0203874292],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75,0.75,0.86902692],"xyz":[2.43042,9.66507675,6.7704305708],"label":"Zn","properties":{}}]},"7":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[-4.856584,4.856584,4.856584],[4.856584,-4.856584,4.856584],[4.856584,4.856584,-4.856584]],"pbc":[true,true,true],"a":8.4118502392,"b":8.4118502392,"c":8.4118502392,"alpha":109.4712206345,"beta":109.4712206345,"gamma":109.4712206345,"volume":458.1974897367},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.4258544,0.4258544,0.4258544],"xyz":[2.0681976654,2.0681976654,2.0681976654],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.5741456],"xyz":[2.7883863346,2.7883863346,-2.7883863346],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5741456,0.0],"xyz":[2.7883863346,-2.7883863346,2.7883863346],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5741456,0.0,0.0],"xyz":[-2.7883863346,2.7883863346,2.7883863346],"label":"Zn","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.5,0.25,0.75],"xyz":[2.428292,4.856584,0.0],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.5,0.75,0.25],"xyz":[2.428292,0.0,4.856584],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.5,0.25],"xyz":[0.0,2.428292,4.856584],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.25,0.5],"xyz":[0.0,4.856584,2.428292],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.75,0.5],"xyz":[4.856584,0.0,2.428292],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.5,0.75],"xyz":[4.856584,2.428292,0.0],"label":"Zr","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51838322,0.51838322,0.27053201],"xyz":[1.3138614313,1.3138614313,3.721281873],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24785121,0.24785121,0.72946799],"xyz":[3.5427225687,3.5427225687,-1.135302127],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24785121,0.72946799,0.24785121],"xyz":[3.5427225687,-1.135302127,3.5427225687],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.48161678,0.75214879],"xyz":[5.991886127,1.3138614313,-1.3138614313],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.27053201,0.51838322,0.51838322],"xyz":[3.721281873,1.3138614313,1.3138614313],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51838322,0.27053201,0.51838322],"xyz":[1.3138614313,3.721281873,1.3138614313],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.75214879,0.48161678],"xyz":[5.991886127,-1.3138614313,1.3138614313],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75214879,0.48161678,0.0],"xyz":[-1.3138614313,1.3138614313,5.991886127],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48161678,0.75214879,0.0],"xyz":[1.3138614313,-1.3138614313,5.991886127],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48161678,0.0,0.75214879],"xyz":[1.3138614313,5.991886127,-1.3138614313],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75214879,0.0,0.48161678],"xyz":[-1.3138614313,5.991886127,1.3138614313],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.72946799,0.24785121,0.24785121],"xyz":[-1.135302127,3.5427225687,3.5427225687],"label":"N","properties":{}}]},"37":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[1.537037,-8.306579,0.0],[1.537037,8.306579,0.0],[0.0,0.0,5.818854]],"pbc":[true,true,true],"a":8.4475876688,"b":8.4475876688,"c":5.818854,"alpha":90.0,"beta":90.0,"gamma":159.0332968725,"volume":148.584661107},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.01974571,0.98025429,0.25],"xyz":[1.537037,7.9785403999,1.4547135],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.98025429,0.01974571,0.75],"xyz":[1.537037,-7.9785403999,4.3641405],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.16944846,0.83055154,0.25],"xyz":[1.537037,5.4915049612,1.4547135],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.83055154,0.16944846,0.75],"xyz":[1.537037,-5.4915049612,4.3641405],"label":"Zn","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.33953783,0.66046217,0.25],"xyz":[1.537037,2.6657833832,1.4547135],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.66046217,0.33953783,0.75],"xyz":[1.537037,-2.6657833832,4.3641405],"label":"Zr","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41969297,0.58030703,0.97742156],"xyz":[1.537037,1.3341533779,5.6874733541],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58030703,0.41969297,0.47742156],"xyz":[1.537037,-1.3341533779,2.7780463541],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58030703,0.41969297,0.02257844],"xyz":[1.537037,-1.3341533779,0.1313806459],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41969297,0.58030703,0.52257844],"xyz":[1.537037,1.3341533779,3.0408076459],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75587878,0.24412122,0.25],"xyz":[1.537037,-4.250954601,1.4547135],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24412122,0.75587878,0.75],"xyz":[1.537037,4.250954601,4.3641405],"label":"N","properties":{}}]},"40":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.720953,0.0,0.0],[0.0,11.967072,0.0],[2.860476,5.983536,3.126332]],"pbc":[true,true,true],"a":5.720953,"b":11.967072,"c":7.3320514035,"alpha":35.3057707463,"beta":67.0372179956,"gamma":90.0,"volume":214.0382442275},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.75,0.5],"xyz":[2.86047625,11.967072,1.563166],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.25,0.5],"xyz":[5.72095275,5.983536,1.563166],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[2.8604765,5.983536,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[1.430238,2.991768,1.563166],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[4.2907145,2.991768,1.563166],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[1.430238,8.975304,1.563166],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[4.2907145,8.975304,1.563166],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.29083893,0.06226772,0.0],"xyz":[1.6638758491,0.7451622885,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.20916107,0.56226772,0.0],"xyz":[1.1966006509,6.7286982885,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.79083893,0.43773228,0.0],"xyz":[4.5243523491,5.2383737115,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.70916107,0.93773228,0.0],"xyz":[4.0570771509,11.2219097115,0.0],"label":"N","properties":{}}]},"62":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.999577,0.0,0.0],[0.0,5.448017,0.0],[0.0,0.0,2.860144]],"pbc":[true,true,true],"a":2.999577,"b":5.448017,"c":2.860144,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":46.7397481695},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[1.4997885,2.7240085,0.0],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.28297953,0.5],"xyz":[0.0,1.5416772901,1.430072],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.71702047,0.5],"xyz":[0.0,3.9063397099,1.430072],"label":"N","properties":{}}]},"33":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.543294,-3.200422,0.0],[0.0,6.400844,0.0],[0.0,0.0,10.157681]],"pbc":[true,true,true],"a":6.4008444246,"b":6.400844,"c":10.157681,"alpha":90.0,"beta":90.0,"gamma":119.9999978054,"volume":360.412400822},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.26067791],"xyz":[0.0,0.0,2.6478830535],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.76067791],"xyz":[0.0,0.0,7.7267235535],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.33333333,0.66666667,0.22343397],"xyz":[1.8477646482,3.200422032,2.2695709918],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.33333333,0.66666667,0.72343397],"xyz":[1.8477646482,3.200422032,7.3484114918],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66666667,0.33333333,0.72343397],"xyz":[3.6955293518,-0.000000032,7.3484114918],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66666667,0.33333333,0.22343397],"xyz":[3.6955293518,-0.000000032,2.2695709918],"label":"Zn","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.34838803,1.0,0.98014843],"xyz":[1.9312172764,5.2858552843,9.9560350846],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.65161197,0.0,0.48014843],"xyz":[3.6120767236,-2.0854332843,4.8771945846],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[1.0,0.34838803,0.98014843],"xyz":[5.543294,-0.9704445685,9.9560350846],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.34838803,0.34838803,0.48014843],"xyz":[1.9312172764,1.1149887157,4.8771945846],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.65161197,0.65161197,0.98014843],"xyz":[3.6120767236,2.0854332843,9.9560350846],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.0,0.65161197,0.48014843],"xyz":[0.0,4.1708665685,4.8771945846],"label":"Zr","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.29706565,1.0,0.20897943],"xyz":[1.6467222353,5.4501085583,2.1227463855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.70293435,0.0,0.70897943],"xyz":[3.8965717647,-2.2496865583,7.2015868855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.29706565,0.20897943],"xyz":[0.0,1.9014708834,2.1227463855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.29706565,0.29706565,0.70897943],"xyz":[1.6467222353,0.9507354417,7.2015868855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.70293435,0.70293435,0.20897943],"xyz":[3.8965717647,2.2496865583,2.1227463855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.70293435,0.70897943],"xyz":[0.0,4.4993731166,7.2015868855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44196668,0.0,0.31072121],"xyz":[2.4499512454,-1.4144798859,3.1562069311],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55803332,1.0,0.81072121],"xyz":[3.0933427546,4.6149018859,8.2350474311],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.44196668,0.31072121],"xyz":[0.0,2.8289597719,3.1562069311],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44196668,0.44196668,0.81072121],"xyz":[2.4499512454,1.4144798859,8.2350474311],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55803332,0.55803332,0.31072121],"xyz":[3.0933427546,1.7859421141,3.1562069311],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.55803332,0.81072121],"xyz":[0.0,3.5718842281,8.2350474311],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.46416939],"xyz":[0.0,0.0,4.7148845936],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.96416939],"xyz":[0.0,0.0,9.7937250936],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33333333,0.66666667,0.02996876],"xyz":[1.8477646482,3.200422032,0.304413104],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33333333,0.66666667,0.52996876],"xyz":[1.8477646482,3.200422032,5.383253604],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66666667,0.33333333,0.52996876],"xyz":[3.6955293518,-0.000000032,5.383253604],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66666667,0.33333333,0.02996876],"xyz":[3.6955293518,-0.000000032,0.304413104],"label":"N","properties":{}}]},"17":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.971455,0.0,-0.378972],[0.0,5.742631,0.0],[2.166218,2.871315,3.580151]],"pbc":[true,true,true],"a":4.9858785178,"b":5.742631,"c":5.0748824061,"alpha":55.5428688774,"beta":68.1613349204,"gamma":90.0,"volume":106.9248923934},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.25874194,0.0],"xyz":[1.24286375,1.4858594856,-0.094743],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.74125806,1.0],"xyz":[5.89480925,7.1280865144,3.295922],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[3.5688365,1.4356575,1.6005895],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[1.083109,4.306973,1.7900755],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.63406163,1.0],"xyz":[3.40908175,6.5124969723,3.485408],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.36593837,0.0],"xyz":[3.72859125,2.1014490277,-0.284229],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87451404,0.86599373,0.39235106],"xyz":[5.1975251252,6.0996459235,1.073259705],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12548596,0.13400627,0.60764894],"xyz":[1.9401478748,2.5143000765,2.127919295],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62548596,0.25834479,0.60764894],"xyz":[4.4258753748,3.2283303159,1.938433295],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37451404,0.74165521,0.39235106],"xyz":[2.7117976252,5.3856156841,1.262745705],"label":"N","properties":{}}]},"63":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.779652,0.0,0.0],[0.0,3.779652,0.0],[0.0,0.0,3.779652]],"pbc":[true,true,true],"a":3.779652,"b":3.779652,"c":3.779652,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":53.9952362837},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[1.889826,1.889826,1.889826],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[0.0,1.889826,1.889826],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[1.889826,0.0,1.889826],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[1.889826,1.889826,0.0],"label":"N","properties":{}}]},"26":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.038698,0.0,0.0],[0.0,6.038698,0.0],[3.019349,3.019349,4.167943]],"pbc":[true,true,true],"a":6.038698,"b":6.038698,"c":5.9669661989,"alpha":59.6015292517,"beta":59.6015292517,"gamma":90.0,"volume":151.9876823399},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[3.019349,3.019349,0.0],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.0],"xyz":[0.0,3.019349,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.0],"xyz":[3.019349,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2398157,0.7398157,1.0],"xyz":[4.467523588,7.486872588,4.167943],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7601843,0.2601843,0.0],"xyz":[4.590523412,1.571174412,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7398157,0.7601843,0.0],"xyz":[4.467523588,4.590523412,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2601843,0.2398157,0.0],"xyz":[1.571174412,1.448174588,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.25,0.5],"xyz":[6.038698,3.019349,2.0839715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.75,0.5],"xyz":[3.019349,6.038698,2.0839715],"label":"N","properties":{}}]}}} +{"material_id":{"0":"c07b988125b3a0adc329b2449eeaac24c9e7def8","56":"0060794138df3ba93c68007949b0a72d19cb4c62","57":"004c70f544dca7f8e1c74c6c4ff87a1e355e7cd5","29":"0059fd6dd1d17138c42bb5430fa0bc074053f0de","39":"00a8d0f6f55191596770605314ff347995a3540d","49":"006197ce31efdef23c82f0f6cec08ac0b0febdce","5":"0019407b910a29730999dab65491b4e50624c219","19":"0039f3c461ce4a2cbf4c48b09bfc3c6b13a5c769","45":"0079b9e3ab0e210ea4afe037a9faee8cd6577922","6":"00021364446a637881257fd9ee912a422a6b1753","16":"00cca7ad273875ba80f1d437af797b6a01cc6ebd","50":"00ceac1a8da8e554218a84def07e5a6da9f106f3","30":"00ecadb66a8baab030675a817d2ee15f0002a4dc","64":"00fa7d75b7b2e1442df0a68071210c8d64b93ebe","59":"009ee0451531276f598976f46848fe7d590262ca","55":"00a3259f00f8a9aa503caae2045970d2f7b22e13","69":"00237cf70206a5de77e5154ea72633514cdd4445","31":"006a8e78e4bb5c1570bf70b47b24c0b855a5b5b5","68":"00bbba1d86168727008d4c1542b39d45d93d693c","73":"006047d5cfe39157f2904d2533bad74b2ddd3170","47":"001a938f944fa33e899b81e3d0a909876587e7b0","28":"000fe0f2a4730347df688bd0d3c75f4494a28dca","34":"00af9b9350147b8c20498eb9cd65b63a3132c741","44":"6f7d6a970fde2a4243091aba720fc14ceec2854b","12":"b428ccf0f8cd5488a3af5d72b74e117dc71aa575","4":"0ac3201405a380e382377a71216b33cde892b161","3":"0abac62147275aa8199465764751eaa67c94d16c","21":"0a0ae9c18de23e72bb764e10ef542de693321542","13":"0ab8cc7e5cc3d48fcc786f9060da5a8882374f44","42":"0ad7d4c22ba4414fbe161f27f42c112c6cb83b29","48":"0abb6669aa25624d8371765c5afa6b80ae20f30b","60":"0a2c4708d3c853ea3c4b8630027afe9b788ee2ce","72":"0a946dc02260d0d4b36ef2087e60b415a5fff800","51":"0a130b596d1ce7bfe317d9e546bbeacc703fef65","53":"0a646e174268b493bd67f58fdf52fead02f74a96","20":"0ab8ebf80d94a1ba826857a9e81cea8c7124d86e","32":"0ac8a65af75e8223b07dcd98c6958db7af6504cf","41":"0a5af69c21e6c2d9b004c2f51939790b10b19814","58":"0a58ef8a37185d8abcbd6e1bad7eaf7e3d3d6016","65":"0a4a721fb8f0996350edd4fb224d89ce213f7f93","25":"0ad8980cb8eb0693647f411732b2165b6a0fce0e","23":"0a458b5f2eeebeb0e4e55e1d1a17988ec87b7123","24":"0ac7f92ee7225e47dbdc25f6d60a10b116b0813b","15":"0a3eb2074380f4abdec94d4a6171a099c9ecb30a","18":"0a2c3a235656a97d76f731b269982f92de9b37fd","38":"0a2e1f340255f62a617974d778714e5fdd28a007","8":"0adeaf7a9c16772b66815cce19917ef0460affe8","36":"0a74297fb11027ba2a958da5ee31980b8876e1d4","43":"b3603cef0816d0e115adeafa4eee65c056dc7a26","1":"0fd347fb29c23cad30d42852d7aa4ed906102b8a","22":"0cd142efcf69ba63dc62760ecd72fb4f1e930115","10":"0c710ee221d7567cc0f1a06fba8231ae8261a181","70":"0c5264c980964b88ae8a7c2c18d5a61daff481b1","2":"0c7147c05a270b9b2744576b0bfb69c8391ee1e4","35":"0c429f98b79c9522a11d51fbfae484004f899422","9":"0c27147781fc9c64cbcf45acc1575a0bf8070841","52":"0c450e6f9c256e33ef452c98dd20917fb6484317","14":"0c9cbed1e5d755a9666db36f742004c14bf780bd","11":"0cd1f1670176b03cc3d61935d9a6882c9508e33a","27":"0c882a0621189d18ff1350e3bed4114868663acf","7":"0c5ffa8e2b3126eba02901c37b31e8faf3b5377c","37":"0c9c74b6f48facd507c4e41d9df797a2017634e7","40":"0c13902f8200732555ad1603e954a726d4d24d85","62":"0c9cf664171d7e10527033cda1551694141207ed","33":"0c0b4fd84c8f4e075436d7ec34bfb3fad5e610be","17":"0c2fc1da358bcddfb4baf41b5dfd7285a13b766a","63":"0c5ef0e6b20d6e34ae388d640797f032a15df918","26":"0c5e41fdc8fba8e90b48cbe4752dc2c4a2805f21"},"composition":{"0":"Hf","56":"Hf(ZnN2)3","57":"Hf(ZnN2)3","29":"Hf(ZnN3)2","39":"Hf2Zn4N","49":"Hf2Zn4N9","5":"Hf2Zn4N9","19":"Hf2ZnN4","45":"Hf2ZnN5","6":"Hf2ZnN9","16":"Hf3ZnN13","50":"Hf3ZnN4","30":"Hf5(ZnN8)2","64":"Hf5ZnN3","59":"Hf6Zn2N13","55":"Hf7Zn5N19","69":"HfZn2N7","31":"HfZn3N2","68":"HfZn3N4","73":"HfZnN","47":"HfZnN12","28":"HfZnN2","34":"HfZnN2","44":"N2","12":"Ti","4":"Ti(ZnN2)2","3":"Ti(ZnN2)2","21":"Ti2Zn2N5","13":"Ti2Zn3N4","42":"Ti2Zn3N7","48":"Ti2ZnN3","60":"Ti2ZnN5","72":"Ti3ZnN5","51":"Ti3ZnN8","53":"Ti4(ZnN3)3","20":"Ti4Zn3N8","32":"Ti4ZnN7","41":"Ti5(ZnN3)3","58":"Ti6ZnN8","65":"Ti7(ZnN)3","25":"Ti7ZnN12","23":"TiZn2N3","24":"TiZn2N3","15":"TiZn2N5","18":"TiZnN","38":"TiZnN2","8":"TiZnN3","36":"TiZnN4","43":"Zn","1":"Zr","22":"Zr(ZnN)2","10":"Zr(ZnN)6","70":"Zr(ZnN2)2","2":"Zr(ZnN3)2","35":"Zr(ZnN5)2","9":"Zr2Zn2N3","52":"Zr2Zn3N4","14":"Zr2ZnN5","11":"Zr3ZnN6","27":"Zr4ZnN5","7":"Zr6Zn4N13","37":"ZrZn2N3","40":"ZrZn3N2","62":"ZrZnN2","33":"ZrZnN3","17":"ZrZnN3","63":"ZrZnN3","26":"ZrZnN3"},"E_f":{"0":0.0,"56":0.632228635,"57":0.870833935,"29":0.1256185167,"39":0.2936619536,"49":-0.0370197883,"5":0.561953045,"19":-0.6007983286,"45":-0.0922818656,"6":0.0288602979,"16":-0.0899045838,"50":-1.02825885,"30":-0.0069458522,"64":-0.3175585194,"59":-0.2216884393,"55":0.3828095202,"69":0.1671952525,"31":0.9949698083,"68":0.1143060125,"73":-0.369611975,"47":0.8577765143,"28":-0.6694122625,"34":-0.3108887625,"44":0.0,"12":0.0,"4":0.4436387,"3":0.4993669143,"21":-0.4770085806,"13":-0.4294422111,"42":0.6236076854,"48":-0.8424399458,"60":-0.0493847406,"72":-0.701213825,"51":-0.2382116083,"53":-0.3996681891,"20":-0.2971007933,"32":-0.5551503479,"41":-0.2279864721,"58":-1.1345180867,"65":-0.4719702519,"25":-0.34730284,"23":-0.0429733292,"24":0.5085712542,"15":0.0205995969,"18":-0.6217663083,"38":2.0046756125,"8":-0.014901635,"36":1.1665261167,"43":0.0,"1":0.0,"22":-0.23095297,"10":0.0001669577,"70":0.7521056286,"2":0.4464389611,"35":0.4785359346,"9":-0.5270690679,"52":-0.3812128222,"14":-0.5414344906,"11":-0.739542305,"27":-0.9191486925,"7":-0.2124962533,"37":0.1968950042,"40":-0.1157231917,"62":-0.2964831375,"33":-0.164177935,"17":0.232577665,"63":0.750659065,"26":0.774344365},"protostructure":{"0":"A_hP2_194_c:Hf","56":"AB6C3_hR30_160_a_2b_b:Hf-N-Zn","57":"AB6C3_hR30_148_a_f_bc:Hf-N-Zn","29":"AB6C2_mC18_12_a_ij_i:Hf-N-Zn","39":"A2BC4_cF112_227_e_c_df:Hf-N-Zn","49":"A2B9C4_oP60_60_d_c4d_2d:Hf-N-Zn","5":"A2B9C4_hP30_176_f_hi_bh:Hf-N-Zn","19":"A2B4C_oP28_61_c_2c_a:Hf-N-Zn","45":"A2B5C_oP16_31_2a_5a_a:Hf-N-Zn","6":"A2B9C_oP48_62_d_c4d_c:Hf-N-Zn","16":"A3B13C_mP34_13_fg_e6g_a:Hf-N-Zn","50":"A3B4C_mP16_6_3a3b_3a5b_2a:Hf-N-Zn","30":"A5B16C2_oC92_68_agh_4i_h:Hf-N-Zn","64":"A5B3C_tP18_125_am_cg_d:Hf-N-Zn","59":"A6B13C2_mC42_12_3i_a6i_i:Hf-N-Zn","55":"A7B19C5_oP31_47_ek2l_ai2j3x_cij:Hf-N-Zn","69":"AB7C2_mP20_11_e_3e2f_f:Hf-N-Zn","31":"AB2C3_tI12_139_a_e_be:Hf-N-Zn","68":"AB4C3_cP16_223_a_e_c:Hf-N-Zn","73":"ABC_hP6_194_a_b_c:Hf-N-Zn","47":"AB12C_mC56_15_e_6f_e:Hf-N-Zn","28":"AB2C_hP8_194_c_f_a:Hf-N-Zn","34":"AB2C_mC16_12_i_2i_g:Hf-N-Zn","44":"A_cP8_205_c:N","12":"A_hP2_194_c:Ti","4":"A4BC2_mC28_5_4c_c_abc:N-Ti-Zn","3":"A4BC2_oP28_62_2cd_c_ac:N-Ti-Zn","21":"A5B2C2_oI36_46_b2c_ab_c:N-Ti-Zn","13":"A4B2C3_mP36_14_4e_2e_3e:N-Ti-Zn","42":"A7B2C3_tI24_139_aeg_e_be:N-Ti-Zn","48":"A3B2C_mC12_12_ai_i_b:N-Ti-Zn","60":"A5B2C_oP32_58_3gh_eg_g:N-Ti-Zn","72":"A5B3C_tP36_76_5a_3a_a:N-Ti-Zn","51":"A8B3C_oI48_72_2jk_aj_b:N-Ti-Zn","53":"A9B4C3_hR48_146_3b_4a_3a:N-Ti-Zn","20":"A8B4C3_mC60_12_8i_4i_3i:N-Ti-Zn","32":"A7B4C_mC48_15_e3f_2f_e:N-Ti-Zn","41":"A9B5C3_hP17_157_cd_bc_c:N-Ti-Zn","58":"A8B6C_hR45_148_cf_f_a:N-Ti-Zn","65":"A3B7C3_oC52_36_3a_7a_3a:N-Ti-Zn","25":"A12B7C_cI40_204_g_bc_a:N-Ti-Zn","23":"A3BC2_oC48_64_e2f_f_2f:N-Ti-Zn","24":"A3BC2_oC24_63_cg_c_e:N-Ti-Zn","15":"A5BC2_oC32_63_c2f_c_f:N-Ti-Zn","18":"ABC_hP6_164_d_c_d:N-Ti-Zn","38":"A2BC_cF32_227_c_b_a:N-Ti-Zn","8":"A3BC_cP40_198_2b_2a_2a:N-Ti-Zn","36":"A4BC_oC24_63_fg_a_c:N-Ti-Zn","43":"A_hP2_194_c:Zn","1":"A_hP2_194_c:Zr","22":"A2B2C_mC20_12_2i_2i_i:N-Zn-Zr","10":"A6B6C_mC26_12_3i_3i_a:N-Zn-Zr","70":"A4B2C_hP14_186_bc_ab_b:N-Zn-Zr","2":"A6B2C_hP9_162_k_c_b:N-Zn-Zr","35":"A10B2C_mP26_11_2e4f_f_e:N-Zn-Zr","9":"A3B2C2_mP14_14_ae_e_e:N-Zn-Zr","52":"A4B3C2_mC36_15_2f_ef_f:N-Zn-Zr","14":"A5BC2_mC32_9_5a_a_2a:N-Zn-Zr","11":"A6BC3_mP20_11_6e_e_3e:N-Zn-Zr","27":"A5BC4_oP20_59_a2e_a_2be:N-Zn-Zr","7":"A13B4C6_cI46_217_ag_c_d:N-Zn-Zr","37":"A3B2C_oC24_63_cf_2c_c:N-Zn-Zr","40":"A2B3C_oI24_72_j_ce_b:N-Zn-Zr","62":"A2BC_oP4_47_k_a_d:N-Zn-Zr","33":"A3BC_hP30_185_ab2c_ab_c:N-Zn-Zr","17":"A3BC_mC20_15_ef_c_e:N-Zn-Zr","63":"A3BC_cP5_221_c_b_a:N-Zn-Zr","26":"A3BC_tI20_140_bh_d_c:N-Zn-Zr"},"structure":{"0":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.771359,-1.600045,0.0],[0.0,3.20009,0.0],[0.0,0.0,5.055614]],"pbc":[true,true,true],"a":3.200089797,"b":3.20009,"c":5.055614,"alpha":90.0,"beta":90.0,"gamma":120.0000020984,"volume":44.8362093331},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.33333333,0.66666667,0.75],"xyz":[0.9237863241,1.600045016,3.7917105],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.66666667,0.33333333,0.25],"xyz":[1.8475726759,-0.000000016,1.2639035],"label":"Hf","properties":{}}]},"56":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.062902,0.0,1.294977],[-3.031451,5.250627,1.294978],[-3.031451,-5.250627,1.294978]],"pbc":[true,true,true],"a":6.1996569334,"b":6.199657013,"c":6.199657013,"alpha":115.7569392378,"beta":115.7569443894,"gamma":115.7569443894,"volume":123.6731006297},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.07941259,0.07941259,0.07941259],"xyz":[0.0,0.0,0.3085125915],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97170032,0.35461423,0.97170032],"xyz":[1.8706662446,-3.2400888855,2.9758777286],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97170032,0.97170032,0.35461423],"xyz":[1.8706662446,3.2400888855,2.9758777286],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.35461423,0.97170033,0.97170033],"xyz":[-3.7413325499,0.0,2.9758783716],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62831402,0.48486499,0.62831402],"xyz":[0.4348587054,-0.75319735,2.2551945327],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62831402,0.62831402,0.48486499],"xyz":[0.4348587054,0.75319735,2.2551945327],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48486498,0.62831401,0.62831401],"xyz":[-0.8697174109,0.0,2.2551946373],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.43962517,0.92332917,0.43962517],"xyz":[-1.4663249745,2.5397492824,2.3343003691],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.43962517,0.43962517,0.92332917],"xyz":[-1.4663249745,-2.5397492824,2.3343003691],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.92332917,0.43962517,0.43962517],"xyz":[2.932649949,0.0,2.3342998854],"label":"Zn","properties":{}}]},"57":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.062449,0.0,4.98739],[-1.531224,2.652158,4.98739],[-1.531224,-2.652158,4.98739]],"pbc":[true,true,true],"a":5.8525766026,"b":5.8525761855,"c":5.8525761855,"alpha":53.8933160047,"beta":53.8933195811,"gamma":53.8933195811,"volume":121.5242070062},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[0.0000005,0.0,7.481085],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.30592519,0.30592519,0.30592519],"xyz":[0.0000003059,0.0,4.5773047001],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.69407481,0.69407481,0.69407481],"xyz":[0.0000006941,0.0,10.3848652999],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.60495542,0.89911462,0.27504484],"xyz":[0.054743976,1.6551316596,8.8731397614],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.10088538,0.72495516,0.39504458],"xyz":[-1.4060141508,0.874974984,6.0890302386],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.72495516,0.39504458,0.10088538],"xyz":[1.4607583477,0.7801566756,6.0890302386],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.27504484,0.60495542,0.89911462],"xyz":[-1.4607573477,-0.7801566756,8.8731397614],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.89911462,0.27504484,0.60495542],"xyz":[1.4060151508,-0.874974984,8.8731397614],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.39504458,0.10088538,0.72495516],"xyz":[-0.054742976,-1.6551316596,6.0890302386],"label":"N","properties":{}}]},"29":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.517271,0.0,-1.602318],[0.0,5.261389,0.0],[-2.700464,0.0,6.804575]],"pbc":[true,true,true],"a":6.7113518952,"b":5.261389,"c":7.3208433084,"alpha":90.0,"beta":125.4587749812,"gamma":90.0,"volume":210.5621412159},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.53948074,0.0,0.19307466],"xyz":[2.9945510132,0.0,0.4493713042],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.46051926,0.0,0.80692534],"xyz":[0.8222559868,0.0,4.7528856958],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.03938539,0.5,0.69311581],"xyz":[-1.6150490327,2.6306945,4.6532505935],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.96061461,0.5,0.30688419],"xyz":[5.4318560327,2.6306945,0.5490064065],"label":"Zn","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[1.9084035,2.6306945,2.6011285],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.19037601,0.0,0.37098077],"xyz":[0.238911835,0.0,2.2193235654],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.80962399,0.0,0.62901923],"xyz":[3.577895165,0.0,2.9829334346],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.69031429,0.5,0.87094031],"xyz":[2.1470223498,2.6306945,4.8202756474],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.30968571,0.5,0.12905969],"xyz":[1.6697846502,2.6306945,0.3819813526],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24131655,0.28439444,0.00896358],"xyz":[1.548519528,1.4963097783,-0.3256724994],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75868345,0.28439444,0.99103642],"xyz":[2.268287472,1.4963097783,5.5279294994],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75868345,0.71560556,0.99103642],"xyz":[2.268287472,3.7650792217,5.5279294994],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24131655,0.71560556,0.00896358],"xyz":[1.548519528,3.7650792217,-0.3256724994],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.74128896,0.78441677,0.50890356],"xyz":[3.4569052984,4.1271217651,2.275091798],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25871104,0.78441677,0.49109644],"xyz":[0.3599017016,4.1271217651,2.927165202],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25871104,0.21558323,0.49109644],"xyz":[0.3599017016,1.1342672349,2.927165202],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.74128896,0.21558323,0.50890356],"xyz":[3.4569052984,1.1342672349,2.275091798],"label":"N","properties":{}}]},"39":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[-6.116632,-6.116632,0.0],[-6.116632,0.0,-6.116632],[0.0,-6.116632,-6.116632]],"pbc":[true,true,true],"a":8.6502239304,"b":8.6502239304,"c":8.6502239304,"alpha":60.0,"beta":60.0,"gamma":60.0,"volume":457.6853939389},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.0],"xyz":[-3.058316,0.0,-3.058316],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.0],"xyz":[-3.058316,-3.058316,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[0.0,-3.058316,-3.058316],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5723017,0.5723017,0.1776983],"xyz":[-7.0011177837,-4.587474,-4.587474],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.4276983,0.8223017,0.8223017],"xyz":[-7.64579,-7.64579,-10.0594337837],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.8223017,0.8223017,0.4276983],"xyz":[-10.0594337837,-7.64579,-7.64579],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.1776983,0.5723017,0.5723017],"xyz":[-4.587474,-4.587474,-7.0011177837],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5723017,0.1776983,0.1776983],"xyz":[-4.587474,-4.587474,-2.1738302163],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.4276983,0.4276983,0.8223017],"xyz":[-5.2321462163,-7.64579,-7.64579],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.1776983,0.1776983,0.5723017],"xyz":[-2.1738302163,-4.587474,-4.587474],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5723017,0.1776983,0.5723017],"xyz":[-4.587474,-7.0011177837,-4.587474],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.4276983,0.8223017,0.4276983],"xyz":[-7.64579,-5.2321462163,-7.64579],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.8223017,0.4276983,0.8223017],"xyz":[-7.64579,-10.0594337837,-7.64579],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.1776983,0.5723017,0.1776983],"xyz":[-4.587474,-2.1738302163,-4.587474],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.8223017,0.4276983,0.4276983],"xyz":[-7.64579,-7.64579,-5.2321462163],"label":"Zn","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.78788573,0.78788573,0.78788573],"xyz":[-9.6384141369,-9.6384141369,-9.6384141369],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.21211427,0.8636572,0.21211427],"xyz":[-6.5800981981,-2.5948498631,-6.5800981981],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.8636572,0.21211427,0.21211427],"xyz":[-6.5800981981,-6.5800981981,-2.5948498631],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.1363428,0.78788573,0.78788573],"xyz":[-5.6531658019,-5.6531658019,-9.6384141369],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.78788573,0.1363428,0.78788573],"xyz":[-5.6531658019,-9.6384141369,-5.6531658019],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.21211427,0.21211427,0.8636572],"xyz":[-2.5948498631,-6.5800981981,-6.5800981981],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.21211427,0.21211427,0.21211427],"xyz":[-2.5948498631,-2.5948498631,-2.5948498631],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.78788573,0.78788573,0.1363428],"xyz":[-9.6384141369,-5.6531658019,-5.6531658019],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[-6.116632,-6.116632,-6.116632],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[-3.058316,-6.116632,-3.058316],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[-3.058316,-3.058316,-6.116632],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[-6.116632,-3.058316,-3.058316],"label":"N","properties":{}}]},"49":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[19.735812,0.0,0.0],[0.0,6.101939,0.0],[0.0,0.0,5.570787]],"pbc":[true,true,true],"a":19.735812,"b":6.101939,"c":5.570787,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":670.8716114622},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.43941653,0.35413699,0.14372104],"xyz":[8.6722420258,2.1609223106,0.8006393013],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.56058347,0.35413699,0.35627896],"xyz":[11.0635699742,2.1609223106,1.9847541987],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.06058347,0.14586301,0.64372104],"xyz":[1.1956639742,0.8900471894,3.5860328013],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.56058347,0.64586301,0.85627896],"xyz":[11.0635699742,3.9410166894,4.7701476987],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.06058347,0.85413699,0.14372104],"xyz":[1.1956639742,5.2118918106,0.8006393013],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.43941653,0.64586301,0.64372104],"xyz":[8.6722420258,3.9410166894,3.5860328013],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.93941653,0.85413699,0.35627896],"xyz":[18.5401480258,5.2118918106,1.9847541987],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.93941653,0.14586301,0.85627896],"xyz":[18.5401480258,0.8900471894,4.7701476987],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.2871622,0.40737164,0.21147903],"xyz":[5.6673791927,2.4857568976,1.1781046311],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.7128378,0.40737164,0.28852097],"xyz":[14.0684328073,2.4857568976,1.6072888689],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.2128378,0.09262836,0.71147903],"xyz":[4.2005268073,0.5652126024,3.9634981311],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.7128378,0.59262836,0.78852097],"xyz":[14.0684328073,3.6161821024,4.3926823689],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.2128378,0.90737164,0.21147903],"xyz":[4.2005268073,5.5367263976,1.1781046311],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.2871622,0.59262836,0.71147903],"xyz":[5.6673791927,3.6161821024,3.9634981311],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.7871622,0.90737164,0.28852097],"xyz":[15.5352851927,5.5367263976,1.6072888689],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.7871622,0.09262836,0.78852097],"xyz":[15.5352851927,0.5652126024,4.3926823689],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.13213508,0.25],"xyz":[0.0,0.8062801979,1.39269675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.36786492,0.75],"xyz":[9.867906,2.2446893021,4.17809025],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.86786492,0.75],"xyz":[0.0,5.2956588021,4.17809025],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.63213508,0.25],"xyz":[9.867906,3.8572496979,1.39269675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2816148,0.9097524,0.50653017],"xyz":[5.5578967492,5.5512536499,2.8217716861],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7183852,0.9097524,0.99346983],"xyz":[14.1779152508,5.5512536499,5.5344088139],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2183852,0.5902476,0.00653017],"xyz":[4.3100092508,3.6016548501,0.0363781861],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7183852,0.0902476,0.49346983],"xyz":[14.1779152508,0.5506853501,2.7490153139],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2183852,0.4097524,0.50653017],"xyz":[4.3100092508,2.5002841499,2.8217716861],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2816148,0.0902476,0.00653017],"xyz":[5.5578967492,0.5506853501,0.0363781861],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7816148,0.4097524,0.99346983],"xyz":[15.4258027492,2.5002841499,5.5344088139],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7816148,0.5902476,0.49346983],"xyz":[15.4258027492,3.6016548501,2.7490153139],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.46760771,0.05450945,0.24347796],"xyz":[9.2286178543,0.3326133388,1.3563638544],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.53239229,0.05450945,0.25652204],"xyz":[10.5071941457,0.3326133388,1.4290296456],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.03239229,0.44549055,0.74347796],"xyz":[0.6392881457,2.7183561612,4.1417573544],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.53239229,0.94549055,0.75652204],"xyz":[10.5071941457,5.7693256612,4.2144231456],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.03239229,0.55450945,0.24347796],"xyz":[0.6392881457,3.3835828388,1.3563638544],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.46760771,0.94549055,0.74347796],"xyz":[9.2286178543,5.7693256612,4.1417573544],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.96760771,0.55450945,0.25652204],"xyz":[19.0965238543,3.3835828388,1.4290296456],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.96760771,0.44549055,0.75652204],"xyz":[19.0965238543,2.7183561612,4.2144231456],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3444681,0.04626765,0.98351114],"xyz":[6.7983576616,0.282322378,5.4789310731],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6555319,0.04626765,0.51648886],"xyz":[12.9374543384,0.282322378,2.8772494269],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.1555319,0.45373235,0.48351114],"xyz":[3.0695483384,2.768647122,2.6935375731],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6555319,0.95373235,0.01648886],"xyz":[12.9374543384,5.819616622,0.0918559269],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.1555319,0.54626765,0.98351114],"xyz":[3.0695483384,3.333291878,5.4789310731],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3444681,0.95373235,0.48351114],"xyz":[6.7983576616,5.819616622,2.6935375731],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.8444681,0.54626765,0.51648886],"xyz":[16.6662636616,3.333291878,2.8772494269],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.8444681,0.45373235,0.01648886],"xyz":[16.6662636616,2.768647122,0.0918559269],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37061771,0.46850177,0.41085414],"xyz":[7.3144414484,2.8587692219,2.288780902],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62938229,0.46850177,0.08914586],"xyz":[12.4213705516,2.8587692219,0.496612598],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12938229,0.03149823,0.91085414],"xyz":[2.5534645516,0.1922002781,5.074174402],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62938229,0.53149823,0.58914586],"xyz":[12.4213705516,3.2431697781,3.282006098],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12938229,0.96850177,0.41085414],"xyz":[2.5534645516,5.9097387219,2.288780902],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37061771,0.53149823,0.91085414],"xyz":[7.3144414484,3.2431697781,5.074174402],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87061771,0.96850177,0.08914586],"xyz":[17.1823474484,5.9097387219,0.496612598],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87061771,0.03149823,0.58914586],"xyz":[17.1823474484,0.1922002781,3.282006098],"label":"N","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.09968678,0.269465,0.18570777],"xyz":[1.967399549,1.6442589926,1.0345384309],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.90031322,0.269465,0.31429223],"xyz":[17.768412451,1.6442589926,1.7508550691],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.40031322,0.230535,0.68570777],"xyz":[7.900506451,1.4067105074,3.8199319309],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.90031322,0.730535,0.81429223],"xyz":[17.768412451,4.4576800074,4.5362485691],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.40031322,0.769465,0.18570777],"xyz":[7.900506451,4.6952284926,1.0345384309],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.09968678,0.730535,0.68570777],"xyz":[1.967399549,4.4576800074,3.8199319309],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.59968678,0.769465,0.31429223],"xyz":[11.835305549,4.6952284926,1.7508550691],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.59968678,0.230535,0.81429223],"xyz":[11.835305549,1.4067105074,4.5362485691],"label":"Hf","properties":{}}]},"5":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.37068,-3.100763,0.0],[0.0,6.201526,0.0],[0.0,0.0,10.101875]],"pbc":[true,true,true],"a":6.2015268156,"b":6.201526,"c":10.101875,"alpha":90.0,"beta":90.0,"gamma":119.9999956495,"volume":336.4572072644},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.33333333,0.66666667,0.07050127],"xyz":[1.7902266488,3.100763031,0.7121950169],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.66666667,0.33333333,0.57050127],"xyz":[3.5804533512,-0.000000031,5.7631325169],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.33333333,0.66666667,0.42949873],"xyz":[1.7902266488,3.100763031,4.3387424831],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.66666667,0.33333333,0.92949873],"xyz":[3.5804533512,-0.000000031,9.3896799831],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[0.0,0.0,5.0509375],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.34920449,0.19805089,0.25],"xyz":[1.8754655704,0.1454173816,2.52546875],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.19805089,0.8488464,0.75],"xyz":[1.0636679539,4.6500341478,7.57640625],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.8488464,0.65079551,0.25],"xyz":[4.5588823836,1.4038537661,2.52546875],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.1511536,0.34920449,0.75],"xyz":[0.8117976164,1.6969092339,7.57640625],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.80194911,0.1511536,0.25],"xyz":[4.3070120461,-1.5492711478,2.52546875],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.65079551,0.80194911,0.75],"xyz":[3.4952144296,2.9553456184,7.57640625],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.43067355,0.93955068,0.25],"xyz":[2.3130098215,4.4912313614,2.52546875],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.93955068,0.50887713,0.75],"xyz":[5.0460260461,0.2424907673,7.57640625],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.50887713,0.56932645,0.25],"xyz":[2.7330162245,1.9527854059,2.52546875],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.49112287,0.43067355,0.75],"xyz":[2.6376637755,1.1479775941,7.57640625],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.06044932,0.49112287,0.25],"xyz":[0.3246539539,2.8582722327,2.52546875],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.56932645,0.06044932,0.75],"xyz":[3.0576701785,-1.3904683614,7.57640625],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.34135426,0.31478008,0.0755223],"xyz":[1.8333044971,0.8936581911,0.7629168343],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31478008,0.97342582,0.5755223],"xyz":[1.6905830801,5.0606671066,5.8138543343],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.34135426,0.31478008,0.4244777],"xyz":[1.8333044971,0.8936581911,4.2880206657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97342582,0.65864574,0.4244777],"xyz":[5.227958583,1.0662459155,4.2880206657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02657418,0.34135426,0.9244777],"xyz":[0.142721417,2.0345170845,9.3389581657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68521992,0.02657418,0.4244777],"xyz":[3.6800969199,-1.9599041066,4.2880206657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31478008,0.97342582,0.9244777],"xyz":[1.6905830801,5.0606671066,9.3389581657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.65864574,0.68521992,0.5755223],"xyz":[3.5373755029,2.2071048089,5.8138543343],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.65864574,0.68521992,0.9244777],"xyz":[3.5373755029,2.2071048089,9.3389581657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68521992,0.02657418,0.0755223],"xyz":[3.6800969199,-1.9599041066,0.7629168343],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97342582,0.65864574,0.0755223],"xyz":[5.227958583,1.0662459155,0.7629168343],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02657418,0.34135426,0.5755223],"xyz":[0.142721417,2.0345170845,5.8138543343],"label":"N","properties":{}}]},"19":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.306134,0.0,0.0],[0.0,5.45582,0.0],[0.0,0.0,11.449448]],"pbc":[true,true,true],"a":5.306134,"b":5.45582,"c":11.449448,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":331.4536423784},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.0007753,0.08033905,0.34704739],"xyz":[0.0041138457,0.4383153958,3.9735010453],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.4992247,0.91966095,0.84704739],"xyz":[2.6489531543,5.0175046042,9.6982250453],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.9992247,0.91966095,0.65295261],"xyz":[5.3020201543,5.0175046042,7.4759469547],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.4992247,0.58033905,0.34704739],"xyz":[2.6489531543,3.1662253958,3.9735010453],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.0007753,0.41966095,0.84704739],"xyz":[0.0041138457,2.2895946042,9.6982250453],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5007753,0.08033905,0.15295261],"xyz":[2.6571808457,0.4383153958,1.7512229547],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5007753,0.41966095,0.65295261],"xyz":[2.6571808457,2.2895946042,7.4759469547],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.9992247,0.58033905,0.15295261],"xyz":[5.3020201543,3.1662253958,1.7512229547],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[2.653067,0.0,5.724724],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[2.653067,2.72791,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[0.0,2.72791,5.724724],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.19703661,0.30428541,0.05279103],"xyz":[1.0455026556,1.6601264256,0.6044281529],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.30296339,0.69571459,0.55279103],"xyz":[1.6075643444,3.7956935744,6.3291521529],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.80296339,0.69571459,0.94720897],"xyz":[4.2606313444,3.7956935744,10.8450198471],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.30296339,0.80428541,0.05279103],"xyz":[1.6075643444,4.3880364256,0.6044281529],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.19703661,0.19571459,0.55279103],"xyz":[1.0455026556,1.0677835744,6.3291521529],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.69703661,0.30428541,0.44720897],"xyz":[3.6985696556,1.6601264256,5.1202958471],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.69703661,0.19571459,0.94720897],"xyz":[3.6985696556,1.0677835744,10.8450198471],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.80296339,0.80428541,0.44720897],"xyz":[4.2606313444,4.3880364256,5.1202958471],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.86819053,0.95152275,0.18764705],"xyz":[4.6067352897,5.1913368499,2.1484551413],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63180947,0.04847725,0.68764705],"xyz":[3.3524657103,0.2644831501,7.8731791413],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.13180947,0.04847725,0.81235295],"xyz":[0.6993987103,0.2644831501,9.3009928587],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63180947,0.45152275,0.18764705],"xyz":[3.3524657103,2.4634268499,2.1484551413],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.86819053,0.54847725,0.68764705],"xyz":[4.6067352897,2.9923931501,7.8731791413],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36819053,0.95152275,0.31235295],"xyz":[1.9536682897,5.1913368499,3.5762688587],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36819053,0.54847725,0.81235295],"xyz":[1.9536682897,2.9923931501,9.3009928587],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.13180947,0.45152275,0.31235295],"xyz":[0.6993987103,2.4634268499,3.5762688587],"label":"N","properties":{}}]},"45":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[12.156346,0.0,0.0],[0.0,4.319613,0.0],[0.0,0.0,4.222262]],"pbc":[true,true,true],"a":12.156346,"b":4.319613,"c":4.222262,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":221.71397633},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.58531349,0.5,0.16750956],"xyz":[7.1152733029,2.1598065,0.7072692498],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.08531349,0.0,0.83249044],"xyz":[1.0371003029,0.0,3.5149927502],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.40614012,0.0,0.0412382],"xyz":[4.9371798232,0.0,0.1741184848],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.90614012,0.5,0.9587618],"xyz":[11.0153528232,2.1598065,4.0481435152],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.64872327,0.5,0.6371845],"xyz":[7.8861045284,2.1598065,2.6903599013],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14872327,0.0,0.3628155],"xyz":[1.8079315284,0.0,1.5319020987],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.39480052,0.0,0.54485042],"xyz":[4.7993317221,0.0,2.3005012241],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.89480052,0.5,0.45514958],"xyz":[10.8775047221,2.1598065,1.9217607759],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.42143717,0.5,0.07644136],"xyz":[5.1231360558,2.1598065,0.3227554496],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92143717,0.0,0.92355864],"xyz":[11.2013090558,0.0,3.8995065504],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58993952,0.0,0.09266172],"xyz":[7.1715089242,0.0,0.3912420592],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.08993952,0.5,0.90733828],"xyz":[1.0933359242,2.1598065,3.8310199408],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.23293583,0.0,0.16108981],"xyz":[2.8316485453,0.0,0.6801633834],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.73293583,0.5,0.83891019],"xyz":[8.9098215453,2.1598065,3.5420986166],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.19201007,0.5,0.28261666],"xyz":[2.3341408464,2.1598065,1.1932815841],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.69201007,0.0,0.71738334],"xyz":[8.4123138464,0.0,3.0289804159],"label":"Zn","properties":{}}]},"6":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.729996,0.0,0.0],[0.0,9.412429,0.0],[0.0,0.0,8.919448]],"pbc":[true,true,true],"a":6.729996,"b":9.412429,"c":8.919448,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":565.0078701445},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.25298222,0.45025421,0.31557996],"xyz":[1.7025693287,4.2379857836,2.8147990431],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.24701778,0.95025421,0.81557996],"xyz":[1.6624286713,8.9442002836,7.2745230431],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.24701778,0.54974579,0.81557996],"xyz":[1.6624286713,5.1744432164,7.2745230431],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.74701778,0.95025421,0.68442004],"xyz":[5.0274266713,8.9442002836,6.1046489569],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.74701778,0.54974579,0.68442004],"xyz":[5.0274266713,5.1744432164,6.1046489569],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75298222,0.04974579,0.18442004],"xyz":[5.0675673287,0.4682287164,1.6449249569],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75298222,0.45025421,0.18442004],"xyz":[5.0675673287,4.2379857836,1.6449249569],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25298222,0.04974579,0.31557996],"xyz":[1.7025693287,0.4682287164,2.8147990431],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.59697916,0.25,0.82686578],"xyz":[4.0176673589,2.35310725,7.3751863277],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.90302084,0.75,0.32686578],"xyz":[6.0773266411,7.05932175,2.9154623277],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.40302084,0.75,0.17313422],"xyz":[2.7123286411,7.05932175,1.5442616723],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.09697916,0.25,0.67313422],"xyz":[0.6526693589,2.35310725,6.0039856723],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.01809884,0.57498929,0.15848322],"xyz":[0.1218051208,5.4120458679,1.4135828397],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48190116,0.07498929,0.65848322],"xyz":[3.2431928792,0.7058313679,5.8733068397],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48190116,0.42501071,0.65848322],"xyz":[3.2431928792,4.0003831321,5.8733068397],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.98190116,0.07498929,0.84151678],"xyz":[6.6081908792,0.7058313679,7.5058651603],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.98190116,0.42501071,0.84151678],"xyz":[6.6081908792,4.0003831321,7.5058651603],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51809884,0.92501071,0.34151678],"xyz":[3.4868031208,8.7065976321,3.0461411603],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51809884,0.57498929,0.34151678],"xyz":[3.4868031208,5.4120458679,3.0461411603],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.01809884,0.92501071,0.15848322],"xyz":[0.1218051208,8.7065976321,1.4135828397],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.38099059,0.11552545,0.96761734],"xyz":[2.5640651467,1.0873750958,8.630612548],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.11900941,0.61552545,0.46761734],"xyz":[0.8009328533,5.7935895958,4.170888548],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.11900941,0.88447455,0.46761734],"xyz":[0.8009328533,8.3250539042,4.170888548],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.61900941,0.61552545,0.03238266],"xyz":[4.1659308533,5.7935895958,0.288835452],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.61900941,0.88447455,0.03238266],"xyz":[4.1659308533,8.3250539042,0.288835452],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.88099059,0.38447455,0.53238266],"xyz":[5.9290631467,3.6188394042,4.748559452],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.88099059,0.11552545,0.53238266],"xyz":[5.9290631467,1.0873750958,4.748559452],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.38099059,0.38447455,0.96761734],"xyz":[2.5640651467,3.6188394042,8.630612548],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.18405523,0.59629476,0.09903596],"xyz":[1.2386909617,5.6125820916,0.8833460954],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31594477,0.09629476,0.59903596],"xyz":[2.1263070383,0.9063675916,5.3430700954],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31594477,0.40370524,0.59903596],"xyz":[2.1263070383,3.7998469084,5.3430700954],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.81594477,0.09629476,0.90096404],"xyz":[5.4913050383,0.9063675916,8.0361019046],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.81594477,0.40370524,0.90096404],"xyz":[5.4913050383,3.7998469084,8.0361019046],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68405523,0.90370524,0.40096404],"xyz":[4.6036889617,8.5060614084,3.5763779046],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68405523,0.59629476,0.40096404],"xyz":[4.6036889617,5.6125820916,3.5763779046],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.18405523,0.90370524,0.09903596],"xyz":[1.2386909617,8.5060614084,0.8833460954],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.94408897,0.3893453,0.40753579],"xyz":[6.3537149917,3.6646849927,3.634994287],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55591103,0.8893453,0.90753579],"xyz":[3.7412790083,8.3708994927,8.094718287],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55591103,0.6106547,0.90753579],"xyz":[3.7412790083,5.7477440073,8.094718287],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.05591103,0.8893453,0.59246421],"xyz":[0.3762810083,8.3708994927,5.284453713],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.05591103,0.6106547,0.59246421],"xyz":[0.3762810083,5.7477440073,5.284453713],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44408897,0.1106547,0.09246421],"xyz":[2.9887169917,1.0415295073,0.824729713],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44408897,0.3893453,0.09246421],"xyz":[2.9887169917,3.6646849927,0.824729713],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.94408897,0.1106547,0.40753579],"xyz":[6.3537149917,1.0415295073,3.634994287],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.32785766,0.25,0.33884582],"xyz":[2.2064807404,2.35310725,3.0223176715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17214234,0.75,0.83884582],"xyz":[1.1585172596,7.05932175,7.4820416715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.67214234,0.75,0.66115418],"xyz":[4.5235152596,7.05932175,5.8971303285],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82785766,0.25,0.16115418],"xyz":[5.5714787404,2.35310725,1.4374063285],"label":"N","properties":{}}]},"16":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[10.962471,0.0,0.122473],[0.0,3.175217,0.0],[-0.573407,0.0,9.709596]],"pbc":[true,true,true],"a":10.9631551144,"b":3.175217,"c":9.7265127395,"alpha":90.0,"beta":92.7396338238,"gamma":90.0,"volume":338.1967808169},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.0],"xyz":[5.4812355,0.0,0.0612365],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[5.194532,0.0,4.9160345],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6736032,0.18759091,0.93174711],"xyz":[6.8500852304,0.5956418465,9.129386217],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6736032,0.81240909,0.43174711],"xyz":[7.1367887304,2.5795751535,4.274588217],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3263968,0.81240909,0.06825289],"xyz":[3.5389787696,2.5795751535,0.702682783],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3263968,0.18759091,0.56825289],"xyz":[3.2522752696,0.5956418465,5.557480783],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75558845,0.23022353,0.03949303],"xyz":[8.2604708912,0.7310096663,0.4760005504],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75558845,0.76977647,0.53949303],"xyz":[7.9737673912,2.4442073337,5.3307985504],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24441155,0.76977647,0.96050697],"xyz":[2.1285931088,2.4442073337,9.3560684496],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24441155,0.23022353,0.46050697],"xyz":[2.4152966088,0.7310096663,4.5012704496],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12699532,0.2300208,0.47579975],"xyz":[1.1193556054,0.7303659545,4.6353768472],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12699532,0.7699792,0.97579975],"xyz":[0.8326521054,2.4448510455,9.4901748472],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87300468,0.7699792,0.52420025],"xyz":[9.2697083946,2.4448510455,5.1966921528],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87300468,0.2300208,0.02420025],"xyz":[9.5564118946,0.7303659545,0.3418941528],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07990668,0.20674338,0.60169736],"xyz":[0.5309571841,0.6564550948,5.8520246907],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07990668,0.79325662,0.10169736],"xyz":[0.8176606841,2.5187619052,0.9972266907],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92009332,0.79325662,0.39830264],"xyz":[9.8581068159,2.5187619052,3.9800443093],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92009332,0.20674338,0.89830264],"xyz":[9.5714033159,0.6564550948,8.8348423093],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14854564,0.29132038,0.73090146],"xyz":[1.2093232572,0.925005423,7.1149507226],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14854564,0.70867962,0.23090146],"xyz":[1.4960267572,2.250211577,2.2601527226],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85145436,0.70867962,0.26909854],"xyz":[9.1797407428,2.250211577,2.7171182774],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85145436,0.29132038,0.76909854],"xyz":[8.8930372428,0.925005423,7.5719162774],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41976842,0.75041369,0.33129433],"xyz":[4.4117326431,2.3827263055,3.2681443991],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41976842,0.24958631,0.83129433],"xyz":[4.1250291431,0.7924906945,8.1229423991],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58023158,0.24958631,0.66870567],"xyz":[5.9773313569,0.7924906945,6.5639246009],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58023158,0.75041369,0.16870567],"xyz":[6.2640348569,2.3827263055,1.7091266009],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.45635328,0.75],"xyz":[5.05118025,1.4490206927,7.3434335],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.54364672,0.25],"xyz":[5.33788375,1.7261963073,2.4886355],"label":"N","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.0,0.23886969,0.25],"xyz":[-0.14335175,0.7584631005,2.427399],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.0,0.76113031,0.75],"xyz":[-0.43005525,2.4167538995,7.282197],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.69243328,0.26495359,0.26261208],"xyz":[7.4401961465,0.8412851432,2.6346615826],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.69243328,0.73504641,0.76261208],"xyz":[7.1534926465,2.3339318568,7.4894595826],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.30756672,0.73504641,0.73738792],"xyz":[2.9488678535,2.3339318568,7.1974074174],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.30756672,0.26495359,0.23738792],"xyz":[3.2355713535,0.8412851432,2.3426094174],"label":"Hf","properties":{}}]},"50":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[8.083094,0.0,-0.208196],[0.0,3.746822,0.0],[0.280916,0.0,8.346883]],"pbc":[true,true,true],"a":8.0857748044,"b":3.746822,"c":8.351608804,"alpha":90.0,"beta":89.5478661301,"gamma":90.0,"volume":253.0121193585},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.11519925,0.5,0.14812181],"xyz":[0.9727761529,1.873411,1.2123713948],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.52623739,0.5,0.32004718],"xyz":[4.3435326633,1.873411,2.5618358463],"label":"Zn","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.07390019,0.5,0.78474769],"xyz":[0.8177903645,1.873411,6.534811429],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.44698331,0.5,0.97366906],"xyz":[3.8865273288,1.873411,8.0340415873],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.37200353,0.0,0.59577805],"xyz":[3.174303088,0.0,4.8954400304],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.971063,0.0,0.44002485],"xyz":[7.9728035297,0.0,3.4706645077],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.70070504,0.5,0.65161885],"xyz":[5.8469148655,1.873411,5.293102315],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.77589491,0.0,0.00494085],"xyz":[6.2730194555,0.0,-0.1202975198],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.50521321,0.0,0.05573442],"xyz":[4.0993425568,0.0,0.3600253133],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33683218,0.5,0.73258869],"xyz":[2.9284420576,1.873411,6.04470497],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.93708398,0.5,0.56442548],"xyz":[7.7330940444,1.873411,4.5160963075],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.70583489,0.5,0.89905921],"xyz":[5.9578898814,1.873411,7.3573900352],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99245769,0.0,0.84790603],"xyz":[8.2603191696,0.0,6.8707467062],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21380499,0.0,0.42136796],"xyz":[1.8465748337,0.0,3.4725957184],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.89843228,0.0,0.2119326],"xyz":[7.3216478301,0.0,1.5819266091],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62841745,0.0,0.58627726],"xyz":[5.2442519824,0.0,4.7627536954],"label":"N","properties":{}}]},"30":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.444884,-6.785908,0.0],[3.444884,6.785908,0.0],[0.0,0.0,12.043561]],"pbc":[true,true,true],"a":7.6102413338,"b":7.6102413338,"c":12.043561,"alpha":90.0,"beta":90.0,"gamma":126.170506369,"volume":563.0766033582},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.75,0.75,0.14314454],"xyz":[5.167326,0.0,1.7239699993],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25,0.25,0.35685546],"xyz":[1.722442,0.0,4.2978105007],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75,0.75,0.64314454],"xyz":[5.167326,0.0,7.7457504993],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25,0.25,0.85685546],"xyz":[1.722442,0.0,10.3195910007],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25,0.75,0.25],"xyz":[3.444884,3.392954,3.01089025],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75,0.25,0.75],"xyz":[3.444884,-3.392954,9.03267075],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75,0.25,0.02657995],"xyz":[3.444884,-3.392954,0.3201172492],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75,0.25,0.47342005],"xyz":[3.444884,-3.392954,5.7016632508],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25,0.75,0.52657995],"xyz":[3.444884,3.392954,6.3418977492],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25,0.75,0.97342005],"xyz":[3.444884,3.392954,11.7234437508],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25,0.25,0.10718944],"xyz":[1.722442,0.0,1.2909425592],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75,0.75,0.39281056],"xyz":[5.167326,0.0,4.7308379408],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25,0.25,0.60718944],"xyz":[1.722442,0.0,7.3127230592],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75,0.75,0.89281056],"xyz":[5.167326,0.0,10.7526184408],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.32171573,0.49040581,0.24334585],"xyz":[2.7976644992,1.1447153634,2.9307505886],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.50959419,0.67828427,0.25665415],"xyz":[4.0921035008,1.1447153634,3.0910299114],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00959419,0.17828427,0.74334585],"xyz":[0.6472195008,1.1447153634,8.9525310886],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17828427,0.00959419,0.24334585],"xyz":[0.6472195008,-1.1447153634,2.9307505886],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.67828427,0.50959419,0.75665415],"xyz":[4.0921035008,-1.1447153634,9.1128104114],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99040581,0.82171573,0.25665415],"xyz":[6.2425484992,-1.1447153634,3.0910299114],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.49040581,0.32171573,0.74334585],"xyz":[2.7976644992,-1.1447153634,8.9525310886],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82171573,0.99040581,0.75665415],"xyz":[6.2425484992,1.1447153634,9.1128104114],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02449093,0.58763465,0.10661258],"xyz":[2.1087016165,3.8214414747,1.2839951106],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41236535,0.97550907,0.39338742],"xyz":[4.7810663835,3.8214414747,4.7377853894],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.91236535,0.47550907,0.60661258],"xyz":[4.7810663835,-2.9644665253,7.3057756106],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.47550907,0.91236535,0.10661258],"xyz":[4.7810663835,2.9644665253,1.2839951106],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97550907,0.41236535,0.89338742],"xyz":[4.7810663835,-3.8214414747,10.7595658894],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.08763465,0.52449093,0.39338742],"xyz":[2.1087016165,2.9644665253,4.7377853894],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58763465,0.02449093,0.60661258],"xyz":[2.1087016165,-3.8214414747,7.3057756106],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.52449093,0.08763465,0.89338742],"xyz":[2.1087016165,-2.9644665253,10.7595658894],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92789297,0.09878444,0.102801],"xyz":[3.5367845829,-5.6262542066,1.2380901144],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.90121556,0.07210703,0.397199],"xyz":[3.3529834171,-5.6262542066,4.7836903856],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.40121556,0.57210703,0.602801],"xyz":[3.3529834171,1.1596537934,7.2598706144],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.57210703,0.40121556,0.102801],"xyz":[3.3529834171,-1.1596537934,1.2380901144],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07210703,0.90121556,0.897199],"xyz":[3.3529834171,5.6262542066,10.8054708856],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.59878444,0.42789297,0.397199],"xyz":[3.5367845829,-1.1596537934,4.7836903856],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.09878444,0.92789297,0.602801],"xyz":[3.5367845829,5.6262542066,7.2598706144],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.42789297,0.59878444,0.897199],"xyz":[3.5367845829,1.1596537934,10.8054708856],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28120306,0.47712413,0.97303318],"xyz":[2.6123492036,1.3295023563,11.7187844584],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.52287587,0.71879694,0.52696682],"xyz":[4.2774187964,1.3295023563,6.3465570416],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02287587,0.21879694,0.47303318],"xyz":[0.8325347964,1.3295023563,5.6970039584],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21879694,0.02287587,0.97303318],"xyz":[0.8325347964,-1.3295023563,11.7187844584],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71879694,0.52287587,0.02696682],"xyz":[4.2774187964,-1.3295023563,0.3247765416],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97712413,0.78120306,0.52696682],"xyz":[6.0572332036,-1.3295023563,6.3465570416],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.47712413,0.28120306,0.47303318],"xyz":[2.6123492036,-1.3295023563,5.6970039584],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.78120306,0.97712413,0.02696682],"xyz":[6.0572332036,1.3295023563,0.3247765416],"label":"N","properties":{}}]},"64":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.828845,0.0,0.0],[0.0,5.828845,0.0],[0.0,0.0,9.239161]],"pbc":[true,true,true],"a":5.828845,"b":5.828845,"c":9.239161,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":313.9045050852},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.75,0.25,0.5],"xyz":[4.37163375,1.45721125,4.6195805],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25,0.75,0.5],"xyz":[1.45721125,4.37163375,4.6195805],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.25,0.0],"xyz":[4.37163375,1.45721125,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.75,0.0],"xyz":[1.45721125,4.37163375,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.25,0.23728861],"xyz":[1.45721125,1.45721125,2.1923476713],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.25,0.76271139],"xyz":[1.45721125,1.45721125,7.0468133287],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.75,0.23728861],"xyz":[4.37163375,4.37163375,2.1923476713],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.75,0.76271139],"xyz":[4.37163375,4.37163375,7.0468133287],"label":"N","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.25,0.25,0.0],"xyz":[1.45721125,1.45721125,0.0],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.75,0.75,0.0],"xyz":[4.37163375,4.37163375,0.0],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.57763663,0.07763663,0.25057902],"xyz":[3.3669543826,0.4525318826,2.315139909],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.92236337,0.42236337,0.25057902],"xyz":[5.3763131174,2.4618906174,2.315139909],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.57763663,0.42236337,0.74942098],"xyz":[3.3669543826,2.4618906174,6.924021091],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.07763663,0.92236337,0.25057902],"xyz":[0.4525318826,5.3763131174,2.315139909],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.92236337,0.07763663,0.74942098],"xyz":[5.3763131174,0.4525318826,6.924021091],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.42236337,0.92236337,0.74942098],"xyz":[2.4618906174,5.3763131174,6.924021091],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.07763663,0.57763663,0.74942098],"xyz":[0.4525318826,3.3669543826,6.924021091],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.42236337,0.57763663,0.25057902],"xyz":[2.4618906174,3.3669543826,2.315139909],"label":"Hf","properties":{}}]},"59":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.835117,-2.032658,-0.515824],[6.835117,2.032658,-0.515824],[-3.147213,0.0,11.027458]],"pbc":[true,true,true],"a":7.1495872152,"b":7.1495872152,"c":11.4677713445,"alpha":109.3747833864,"beta":109.3747833864,"gamma":33.0345290025,"volume":299.8193219994},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.34297942,0.34297942,0.99965321],"xyz":[1.5424873506,0.0,10.6697997552],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.65702058,0.65702058,0.00034679],"xyz":[8.9805336494,0.0,-0.6739897552],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.39485957,0.39485957,0.38058576],"xyz":[4.2000382676,0.0,3.7895373981],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.60514043,0.60514043,0.61941424],"xyz":[6.3229827324,0.0,6.2062726019],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.69607843,0.69607843,0.38139415],"xyz":[8.3152263934,0.0,3.4877000504],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.30392157,0.30392157,0.61860585],"xyz":[2.2077946066,0.0,6.5081099496],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.19897726,0.19897726,0.04469716],"xyz":[2.5793942219,0.0,0.2876215623],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.80102274,0.80102274,0.95530284],"xyz":[7.9436267781,0.0,9.7081884377],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.84879528,0.84879528,0.34182287],"xyz":[10.5274407155,0.0,2.8937793893],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.15120472,0.15120472,0.65817713],"xyz":[-0.0044197155,0.0,7.1020306107],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.23924638,0.23924638,0.40916785],"xyz":[1.9828156216,0.0,4.2652632314],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.76075362,0.76075362,0.59083215],"xyz":[8.5402053784,0.0,5.7305467686],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[6.835117,0.0,-0.515824],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.39982928,0.39982928,0.19561494],"xyz":[4.8501179355,0.0,1.744652458],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.60017072,0.60017072,0.80438506],"xyz":[5.6729030645,0.0,8.251157542],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62078394,0.62078394,0.18012629],"xyz":[7.9193659217,0.0,1.3459045875],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37921606,0.37921606,0.81987371],"xyz":[2.6036550783,0.0,8.6499054125],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55627083,0.55627083,0.41837015],"xyz":[6.2876524386,0.0,4.0396835684],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44372917,0.44372917,0.58162985],"xyz":[4.2353685614,0.0,5.9561264316],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.11671079,0.11671079,0.16606411],"xyz":[1.0728246838,0.0,1.7108605453],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.88328921,0.88328921,0.83393589],"xyz":[9.4501963162,0.0,8.2849494547],"label":"Zn","properties":{}}]},"55":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.184151,0.0,0.0],[0.0,7.172117,0.0],[0.0,0.0,25.251255]],"pbc":[true,true,true],"a":4.184151,"b":7.172117,"c":25.251255,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":757.7704796428},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.0,0.257552],"xyz":[2.0920755,0.0,6.5035112278],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.0,0.742448],"xyz":[2.0920755,0.0,18.7477437722],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.17987301],"xyz":[2.0920755,3.5860585,4.5420192431],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.82012699],"xyz":[2.0920755,3.5860585,20.7092357569],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.0,0.09174676],"xyz":[2.0920755,0.0,2.3167208322],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.0,0.90825324],"xyz":[2.0920755,0.0,22.9345341678],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[2.0920755,3.5860585,0.0],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.27199352],"xyz":[0.0,0.0,6.8681777319],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.72800658],"xyz":[0.0,0.0,18.3830797933],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.78477034,0.20603554],"xyz":[2.0920755,5.6284646966,5.2026559596],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.78477034,0.79396446],"xyz":[2.0920755,5.6284646966,20.0485990404],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.21522966,0.79396446],"xyz":[2.0920755,1.5436523034,20.0485990404],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.21522966,0.20603554],"xyz":[2.0920755,1.5436523034,5.2026559596],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.15419995],"xyz":[0.0,3.5860585,3.8937422584],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.84580005],"xyz":[0.0,3.5860585,21.3575127416],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.26138331,0.13101457],"xyz":[2.0920755,1.8746716812,3.3082823158],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.26138331,0.86898543],"xyz":[2.0920755,1.8746716812,21.9429726842],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.73861669,0.86898543],"xyz":[2.0920755,5.2974453188,21.9429726842],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.73861669,0.13101457],"xyz":[2.0920755,5.2974453188,3.3082823158],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.1165113],"xyz":[0.0,0.0,2.9420565467],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.8834887],"xyz":[0.0,0.0,22.3091984533],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.25939093,0.05225807],"xyz":[2.0920755,1.8603820987,1.3195818514],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.25939093,0.94774193],"xyz":[2.0920755,1.8603820987,23.9316731486],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.74060907,0.94774193],"xyz":[2.0920755,5.3117349013,23.9316731486],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.74060907,0.05225807],"xyz":[2.0920755,5.3117349013,1.3195818514],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.0],"xyz":[0.0,3.5860585,0.0],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.19141435],"xyz":[0.0,0.0,4.8334525625],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.80858565],"xyz":[0.0,0.0,20.4178024375],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.07865654],"xyz":[0.0,3.5860585,1.986176349],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.92134346],"xyz":[0.0,3.5860585,23.265078651],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}}]},"69":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.086823,0.0,0.232607],[0.0,9.465448,0.0],[-0.059997,0.0,6.856863]],"pbc":[true,true,true],"a":4.093437217,"b":9.465448,"c":6.8571254794,"alpha":90.0,"beta":87.2437692531,"gamma":90.0,"volume":265.3803153353},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.18968935,0.25,0.17660677],"xyz":[0.7646309221,2.366362,1.2550914974],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.81031065,0.75,0.82339323],"xyz":[3.2621950779,7.099086,5.8343785026],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66980532,0.25,0.3067272],"xyz":[2.7189730755,2.366362,2.2589877948],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33019468,0.75,0.6932728],"xyz":[1.3078529245,7.099086,4.8304822052],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68756283,0.25,0.47916256],"xyz":[2.7811992715,2.366362,3.4454839558],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31243717,0.75,0.52083744],"xyz":[1.2456267285,7.099086,3.6439860442],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.27122645,0.25,0.89843441],"xyz":[1.0545511248,2.366362,6.2235308347],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.72877355,0.75,0.10156559],"xyz":[2.9722748752,7.099086,0.8659391653],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21180647,0.03552534,0.27936006],"xyz":[0.8488547876,0.3362632585,1.9648013267],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.78819353,0.96447466,0.72063994],"xyz":[3.1779712124,9.1291847415,5.1246686733],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.78819353,0.53552534,0.72063994],"xyz":[3.1779712124,5.0689872585,5.1246686733],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21180647,0.46447466,0.27936006],"xyz":[0.8488547876,4.3964607415,1.9648013267],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14015442,0.0283941,0.4748517],"xyz":[0.5442966298,0.2687628771,3.2885939514],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85984558,0.9716059,0.5251483],"xyz":[3.4825293702,9.1966851229,3.8008760486],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85984558,0.5283941,0.5251483],"xyz":[3.4825293702,5.0014868771,3.8008760486],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14015442,0.4716059,0.4748517],"xyz":[0.5442966298,4.4639611229,3.2885939514],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.36190174,0.08645613,0.74088626],"xyz":[1.4345774018,0.8183460028,5.1643364614],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.63809826,0.91354387,0.25911374],"xyz":[2.5922485982,8.6471019972,1.9251335386],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.63809826,0.58645613,0.25911374],"xyz":[2.5922485982,5.5510700028,1.9251335386],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.36190174,0.41354387,0.74088626],"xyz":[1.4345774018,3.9143779972,5.1643364614],"label":"Zn","properties":{}}]},"31":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.768322,0.0,0.0],[0.0,3.768322,0.0],[1.884161,1.884161,6.517125]],"pbc":[true,true,true],"a":3.768322,"b":3.768322,"c":7.0408127097,"alpha":74.4781635913,"beta":74.4781635913,"gamma":90.0,"volume":92.5448088151},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.70751047,0.70751047,0.58497906],"xyz":[3.768322,3.768322,3.8123816564],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.29248953,0.29248953,0.41502094],"xyz":[1.884161,1.884161,2.7047433436],"label":"Zn","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[1.884161,1.884161,0.0],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14233929,0.14233929,0.71532143],"xyz":[1.8841610188,1.8841610188,4.6618391745],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85766071,0.85766071,0.28467857],"xyz":[3.7683219812,3.7683219812,1.8552858255],"label":"N","properties":{}}]},"68":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.629202,0.0,0.0],[0.0,5.629202,0.0],[0.0,0.0,5.629202]],"pbc":[true,true,true],"a":5.629202,"b":5.629202,"c":5.629202,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":178.3776753765},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[2.814601,2.814601,2.814601],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25,0.0,0.5],"xyz":[1.4073005,0.0,2.814601],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.75,0.0],"xyz":[2.814601,4.2219015,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.25],"xyz":[0.0,2.814601,1.4073005],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.75],"xyz":[0.0,2.814601,4.2219015],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.25,0.0],"xyz":[2.814601,1.4073005,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75,0.0,0.5],"xyz":[4.2219015,0.0,2.814601],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.25,0.25],"xyz":[1.4073005,1.4073005,1.4073005],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.75,0.75],"xyz":[1.4073005,4.2219015,4.2219015],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.75,0.75],"xyz":[4.2219015,4.2219015,4.2219015],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.75,0.25],"xyz":[1.4073005,4.2219015,1.4073005],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.25,0.75],"xyz":[1.4073005,1.4073005,4.2219015],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.25,0.75],"xyz":[4.2219015,1.4073005,4.2219015],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.75,0.25],"xyz":[4.2219015,4.2219015,1.4073005],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.25,0.25],"xyz":[4.2219015,1.4073005,1.4073005],"label":"N","properties":{}}]},"73":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[1.749531,-3.048103,0.0],[1.749531,3.048103,0.0],[0.0,0.0,8.634492]],"pbc":[true,true,true],"a":3.5145114338,"b":3.5145114338,"c":8.634492,"alpha":90.0,"beta":90.0,"gamma":120.2906178178,"volume":92.0911863363},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.6698258,0.3301742,0.25],"xyz":[1.749531,-1.0352930609,2.158623],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.3301742,0.6698258,0.75],"xyz":[1.749531,1.0352930609,6.475869],"label":"Zn","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[0.0,0.0,4.317246],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00158956,0.99841044,0.25],"xyz":[1.749531,3.0384127148,2.158623],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99841044,0.00158956,0.75],"xyz":[1.749531,-3.0384127148,6.475869],"label":"N","properties":{}}]},"47":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.380312,-6.691171,-0.394081],[5.380312,6.691171,-0.394081],[-0.621649,0.0,7.622393]],"pbc":[true,true,true],"a":8.5950466202,"b":8.5950466202,"c":7.6477004731,"alpha":95.5423321192,"beta":95.5423321192,"gamma":102.2453362396,"volume":545.5428472824},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.43380935,0.56619065,0.25],"xyz":[5.22489975,0.8857859155,1.51151725],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.56619065,0.43380935,0.75],"xyz":[4.91407525,-0.8857859155,5.32271375],"label":"Zn","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.04124018,0.95875982,0.25],"xyz":[5.22489975,6.1392808071,1.51151725],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.95875982,0.04124018,0.75],"xyz":[4.91407525,-6.1392808071,5.32271375],"label":"Hf","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.15480179,0.73674461,0.24234883],"xyz":[4.6461418867,3.8938789208,1.4959365285],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26325539,0.84519821,0.25765117],"xyz":[5.8036576133,3.8938789208,1.5270979715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.84519821,0.26325539,0.75765117],"xyz":[5.4928331133,-3.8938789208,5.3382944715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.73674461,0.15480179,0.74234883],"xyz":[4.3353173867,-3.8938789208,5.3071330285],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.30916777,0.45162915,0.40555707],"xyz":[3.8412106512,0.9532334545,2.7914997604],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.54837085,0.69083223,0.09444293],"xyz":[6.6085888488,0.9532334545,0.2315347396],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.69083223,0.54837085,0.59444293],"xyz":[6.2977643488,-0.9532334545,4.0427312396],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.45162915,0.30916777,0.90555707],"xyz":[3.5303861512,-0.9532334545,6.6026962604],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00874248,0.11999663,0.479499],"xyz":[0.3945765046,0.7444205421,3.6041961839],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.88000337,0.99125752,0.020501],"xyz":[10.0552229954,0.7444205421,-0.5811616839],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99125752,0.88000337,0.520501],"xyz":[9.7443984954,-0.7444205421,3.2300348161],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.11999663,0.00874248,0.979499],"xyz":[0.0837520046,-0.7444205421,7.4153926839],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82331917,0.56703037,0.21133745],"xyz":[7.3491365998,-1.7148721862,1.0629867624],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.43296963,0.17668083,0.28866255],"xyz":[3.1006629002,-1.7148721862,1.9600477376],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17668083,0.43296963,0.78866255],"xyz":[2.7898384002,1.7148721862,5.7712442376],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.56703037,0.82331917,0.71133745],"xyz":[7.0383120998,1.7148721862,4.8741832624],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82021728,0.43928951,0.1664966],"xyz":[6.6730370514,-2.5488528477,0.7727548231],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.56071049,0.17978272,0.3335034],"xyz":[3.7767624486,-2.5488528477,2.2502796769],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17978272,0.56071049,0.8335034],"xyz":[3.4659379486,2.5488528477,6.0614761769],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.43928951,0.82021728,0.6664966],"xyz":[6.3622125514,2.5488528477,4.5839513231],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02591212,0.12246309,0.04628719],"xyz":[0.7695305375,0.6460390505,0.2943473019],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87753691,0.97408788,0.45371281],"xyz":[9.6802689625,0.6460390505,2.7286871981],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97408788,0.87753691,0.95371281],"xyz":[9.3694444625,-0.6460390505,6.5398836981],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12246309,0.02591212,0.54628719],"xyz":[0.4587060375,-0.6460390505,4.1055438019],"label":"N","properties":{}}]},"28":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.724122,-1.572773,0.0],[0.0,3.145546,0.0],[0.0,0.0,10.570134]],"pbc":[true,true,true],"a":3.145545355,"b":3.145546,"c":10.570134,"alpha":90.0,"beta":90.0,"gamma":120.000006783,"volume":90.5739039367},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.33333333,0.66666667,0.25],"xyz":[0.9080406576,1.5727730157,2.6425335],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.66666667,0.33333333,0.75],"xyz":[1.8160813424,-0.0000000157,7.9276005],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[0.0,0.0,5.285067],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33333333,0.66666667,0.62866178],"xyz":[0.9080406576,1.5727730157,6.6450392553],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66666667,0.33333333,0.12866178],"xyz":[1.8160813424,-0.0000000157,1.3599722553],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33333333,0.66666667,0.87133822],"xyz":[0.9080406576,1.5727730157,9.2101617447],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66666667,0.33333333,0.37133822],"xyz":[1.8160813424,-0.0000000157,3.9250947447],"label":"N","properties":{}}]},"34":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.845331,-2.256375,1.002936],[5.845331,2.256375,1.002936],[-2.35901,0.0,3.49823]],"pbc":[true,true,true],"a":6.3454710826,"b":6.3454710826,"c":4.2193057857,"alpha":112.5809222744,"beta":112.5809222744,"gamma":41.6590031463,"volume":102.9549990948},"sites":[{"species":[{"element":"Hf","occu":1}],"abc":[0.19931503,0.19931503,0.63601203],"xyz":[0.8297659084,0.0,2.6247168016],"label":"Hf","properties":{}},{"species":[{"element":"Hf","occu":1}],"abc":[0.80068497,0.80068497,0.36398797],"xyz":[8.5018860916,0.0,2.8793851984],"label":"Hf","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.74375205,0.25624795,0.0],"xyz":[5.845331,-1.0999920636,1.002936],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25624795,0.74375205,0.0],"xyz":[5.845331,1.0999920636,1.002936],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63229337,0.63229337,0.41424153],"xyz":[6.4147281618,0.0,2.7174117142],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36770663,0.36770663,0.58575847],"xyz":[2.9169238382,0.0,2.7866902858],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.1505916,0.1505916,0.05184831],"xyz":[1.6382048139,0.0,0.4834447874],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.8494084,0.8494084,0.94815169],"xyz":[7.6934471861,0.0,5.0206572126],"label":"N","properties":{}}]},"44":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.946714,0.0,0.0],[0.0,5.946714,0.0],[0.0,0.0,5.946714]],"pbc":[true,true,true],"a":5.946714,"b":5.946714,"c":5.946714,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":210.2960698602},"sites":[{"species":[{"element":"N","occu":1}],"abc":[0.55402836,0.55402836,0.55402836],"xyz":[3.2946482048,3.2946482048,3.2946482048],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.05402836,0.94597164,0.44597164],"xyz":[0.3212912048,5.6254227952,2.6520657952],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55402836,0.94597164,0.05402836],"xyz":[3.2946482048,5.6254227952,0.3212912048],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.94597164,0.44597164,0.05402836],"xyz":[5.6254227952,2.6520657952,0.3212912048],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.94597164,0.05402836,0.55402836],"xyz":[5.6254227952,0.3212912048,3.2946482048],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44597164,0.05402836,0.94597164],"xyz":[2.6520657952,0.3212912048,5.6254227952],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.05402836,0.55402836,0.94597164],"xyz":[0.3212912048,3.2946482048,5.6254227952],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44597164,0.44597164,0.44597164],"xyz":[2.6520657952,2.6520657952,2.6520657952],"label":"N","properties":{}}]},"12":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.5406,-1.466816,0.0],[0.0,2.933632,0.0],[0.0,0.0,4.657195]],"pbc":[true,true,true],"a":2.9336321409,"b":2.933632,"c":4.657195,"alpha":90.0,"beta":90.0,"gamma":119.9999984117,"volume":34.7109380547},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.33333333,0.66666667,0.75],"xyz":[0.8468666582,1.4668160147,3.49289625],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.66666667,0.33333333,0.25],"xyz":[1.6937333418,-0.0000000147,1.16429875],"label":"Ti","properties":{}}]},"4":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.952401,-2.607102,-0.345365],[4.952401,2.607102,-0.345365],[-0.793138,0.0,6.257486]],"pbc":[true,true,true],"a":5.6073642192,"b":5.6073642192,"c":6.3075509453,"alpha":99.9133847309,"beta":99.9133847309,"gamma":55.4130030441,"volume":160.1577058599},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.95747786,0.04252214,0.0],"xyz":[4.952401,-2.3853828875,-0.345365],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.96835037,0.03164963,0.5],"xyz":[4.555832,-2.4420743727,2.783378],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.36677608,0.33913125,0.20324262],"xyz":[3.3347367219,-0.0720728916,1.0279921642],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66086875,0.63322392,0.79675738],"xyz":[5.7769272781,-0.0720728916,4.5387638358],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.57577517,0.7550833,0.28765311],"xyz":[6.3627962053,0.4674745843,1.3403533732],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.2449167,0.42422483,0.71234689],"xyz":[2.7488677947,0.4674745843,4.2264026268],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85703681,0.61391281,0.53609174],"xyz":[6.8595376386,-0.6338490666,2.8465720423],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.38608719,0.14296319,0.46390826],"xyz":[2.2521263614,-0.6338490666,2.7201839577],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.20259831,0.78613842,0.2492118],"xyz":[4.6989614218,1.5213485879,1.2179642888],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21386158,0.79740169,0.7507882],"xyz":[4.4127025782,1.5213485879,4.3487917112],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.64474828,0.89284159,0.05563091],"xyz":[7.5706386211,0.6468045647,-0.182920085],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.10715841,0.35525172,0.94436909],"xyz":[1.5410253789,0.6468045647,5.749676085],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75781176,0.31376727,0.27014504],"xyz":[5.092626763,-1.157669278,1.3203429141],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68623273,0.24218824,0.72985496],"xyz":[4.019037237,-1.157669278,4.2464130859],"label":"N","properties":{}}]},"3":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[10.22588,0.0,0.0],[0.0,6.241736,0.0],[0.0,0.0,4.996117]],"pbc":[true,true,true],"a":10.22588,"b":6.241736,"c":4.996117,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":318.8883754526},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[5.11294,3.120868,2.4980585],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[5.11294,0.0,2.4980585],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.0],"xyz":[0.0,3.120868,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.27439835,0.25,0.02027797],"xyz":[2.8059645993,1.560434,0.1013111106],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.22560165,0.75,0.52027797],"xyz":[2.3069754007,4.681302,2.5993696106],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.72560165,0.75,0.97972203],"xyz":[7.4199154007,4.681302,4.8948058894],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.77439835,0.25,0.47972203],"xyz":[7.9189045993,1.560434,2.3967473894],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.10637322,0.25,0.5618105],"xyz":[1.0877597829,1.560434,2.8068709898],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.39362678,0.75,0.0618105],"xyz":[4.0251802171,4.681302,0.3088124898],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.89362678,0.75,0.4381895],"xyz":[9.1381202171,4.681302,2.1892460102],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.60637322,0.25,0.9381895],"xyz":[6.2006997829,1.560434,4.6873045102],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.09067969,0.25,0.17405839],"xyz":[0.9272796284,1.560434,0.8696160813],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.40932031,0.75,0.67405839],"xyz":[4.1856603716,4.681302,3.3676745813],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.90932031,0.75,0.82594161],"xyz":[9.2986003716,4.681302,4.1265009187],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.59067969,0.25,0.32594161],"xyz":[6.0402196284,1.560434,1.6284424187],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.43282869,0.25,0.79687706],"xyz":[4.4260542445,1.560434,3.9812910264],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.06717131,0.75,0.29687706],"xyz":[0.6868857555,4.681302,1.4832325264],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.56717131,0.75,0.20312294],"xyz":[5.7998257555,4.681302,1.0148259736],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.93282869,0.25,0.70312294],"xyz":[9.5389942445,1.560434,3.5128844736],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33440626,0.99742074,0.26413801],"xyz":[3.419598286,6.22563694,1.3196644021],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.16559374,0.49742074,0.76413801],"xyz":[1.693341714,3.10476894,3.8177229021],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.16559374,0.00257926,0.76413801],"xyz":[1.693341714,0.01609906,3.8177229021],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66559374,0.49742074,0.73586199],"xyz":[6.806281714,3.10476894,3.6764525979],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66559374,0.00257926,0.73586199],"xyz":[6.806281714,0.01609906,3.6764525979],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.83440626,0.50257926,0.23586199],"xyz":[8.532538286,3.13696706,1.1783940979],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.83440626,0.99742074,0.23586199],"xyz":[8.532538286,6.22563694,1.1783940979],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33440626,0.50257926,0.26413801],"xyz":[3.419598286,3.13696706,1.3196644021],"label":"N","properties":{}}]},"21":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.380653,0.0,0.0],[0.0,14.311422,0.0],[2.690327,7.155711,2.712897]],"pbc":[true,true,true],"a":5.380653,"b":14.311422,"c":8.1118351447,"alpha":28.0993508798,"beta":70.6307695167,"gamma":90.0,"volume":208.9060792905},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.59605935,0.66971651,0.9454688],"xyz":[5.7508087701,16.3500970873,2.5649594711],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.45847185,0.16971651,0.9454688],"xyz":[5.0104981754,9.1943860873,2.5649594711],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.45847185,0.38481469,0.9454688],"xyz":[5.0104981754,12.2727469127,2.5649594711],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.59605935,0.88481469,0.9454688],"xyz":[5.7508087701,19.4284579127,2.5649594711],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.99066415,0.99066415,0.01867171],"xyz":[5.3806530362,14.3114220716,0.050654426],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.99066415,0.49066415,0.01867171],"xyz":[5.3806530362,7.1557110716,0.050654426],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.9341569,0.25680447,0.98639105],"xyz":[7.6800886008,10.7335664284,2.6759773204],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.07945204,0.75680447,0.98639105],"xyz":[3.0812183318,17.8892774284,2.6759773204],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.23781504,0.8168759,0.31447074],"xyz":[2.125629331,13.9409174599,0.8531267271],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44771422,0.3168759,0.31447074],"xyz":[3.2550239835,6.7852064599,0.8531267271],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44771422,0.86865337,0.31447074],"xyz":[3.2550239835,14.6819266832,0.8531267271],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.23781504,0.36865337,0.31447074],"xyz":[2.125629331,7.5262156832,0.8531267271],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.9701002,0.028419,0.20962174],"xyz":[5.7837235783,1.9067088926,0.5686821896],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82027806,0.528419,0.20962174],"xyz":[4.9775826313,9.0624198926,0.5686821896],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82027806,0.76195926,0.20962174],"xyz":[4.9775826313,12.4047131074,0.5686821896],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.9701002,0.26195926,0.20962174],"xyz":[5.7837235783,5.2490021074,0.5686821896],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26244227,0.61609265,0.2678147],"xyz":[2.1326199058,10.7335665,0.7265536962],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.46974303,0.11609265,0.2678147],"xyz":[3.248033362,3.5778555,0.7265536962],"label":"N","properties":{}}]},"13":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[9.402404,-0.00113,0.397882],[-0.00065,5.646741,0.000464],[-3.073322,0.000794,8.683129]],"pbc":[true,true,true],"a":9.4108188986,"b":5.6467410565,"c":9.21097378,"alpha":89.9884221515,"beta":107.0678557157,"gamma":90.0132701692,"volume":467.9177850383},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.05277259,0.0446846,0.22554858],"xyz":[-0.1970232467,0.2524418154,1.9794854132],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.94722716,0.95531565,0.77445205],"xyz":[6.5254509597,5.393964597,7.1019949578],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.94695245,0.54466241,0.27464315],"xyz":[8.0592086381,3.0747155721,2.7617899585],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.05304916,0.45533967,0.72535521],"xyz":[-1.7307564613,2.57170117,6.3196714427],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.18677287,0.65379652,0.1218568],"xyz":[1.381183828,3.6917053161,1.1327152386],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.81322239,0.34620769,0.87814188],"xyz":[4.9472076587,1.954723461,7.9487464157],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.81300997,0.1535504,0.37838871],"xyz":[6.4812380392,0.8664410786,3.6091512613],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.18699246,0.84645005,0.62161212],"xyz":[-0.1527857425,4.7799664603,5.4723319127],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.42929711,0.36288193,0.28830955],"xyz":[3.1501209082,2.0488440843,2.6744069845],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.57069576,0.63711251,0.7116907],"xyz":[3.178243288,3.597529528,6.4070673468],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.57061516,0.86310666,0.2115604],"xyz":[4.7144000119,4.8732629482,2.0644442271],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.42938961,0.13689561,0.78843907],"xyz":[1.614078465,0.7731548641,7.0170280698],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.22918593,0.15003641,0.98725724],"xyz":[-0.879358214,0.84774165,8.6637405442],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.77081261,0.84996283,0.01274258],"xyz":[7.2077770402,4.79865906,0.4177323116],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.77079612,0.65007753,0.51282933],"xyz":[5.6708243093,3.6703556287,4.7599507652],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.22920238,0.34992259,0.48717364],"xyz":[0.6575844592,1.976050053,4.321549427],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.61109232,0.38180476,0.12711576],"xyz":[5.3548210391,2.1553629879,1.3470823339],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.38891406,0.61819165,0.87288127],"xyz":[0.9736800783,3.4910217308,7.734369414],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.38888351,0.88195244,0.37279498],"xyz":[2.5101475873,4.9800135638,3.3921658766],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.61111673,0.11804393,0.62720759],"xyz":[3.8182787732,0.6663709403,5.6893315329],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02632592,0.24383232,0.39072107],"xyz":[-0.9534432158,1.3771384427,3.4032692017],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97367511,0.75617134,0.6092774],"xyz":[7.2818896001,4.269287222,5.6781929246],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.9735228,0.74373049,0.10950746],"xyz":[8.816419558,4.198640319,1.3385596913],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02648239,0.25627025,0.890496],"xyz":[-2.4879493937,1.4477688565,7.7429474177],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25275843,0.02636994,0.18684925],"xyz":[1.8022718221,0.1487669626,1.7230164066],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.74723814,0.97364108,0.81314111],"xyz":[4.5261575473,5.4977002607,7.3583735284],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7469406,0.52616949,0.31323453],"xyz":[6.0600247028,2.9705474975,3.0172941937],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25306032,0.4738316,0.68676848],"xyz":[0.268406696,2.6758636588,6.0642073091],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3660237,0.41637224,0.03775171],"xyz":[3.3252088981,2.3507625669,0.4736304064],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63397686,0.58361155,0.96224839],"xyz":[3.0032280704,3.2955508988,8.6078456772],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63414571,0.91658293,0.46221345],"xyz":[4.5413676168,5.1753568236,4.2661994698],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36585057,0.08341002,0.53778712],"xyz":[1.787027659,0.4710083716,4.8152789962],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71185292,0.07797699,0.14532722],"xyz":[6.246440715,0.4396268625,1.5451646433],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28814492,0.9220329,0.85467531],"xyz":[0.0819631939,5.2068339882,7.5363314702],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28829662,0.57788891,0.35464532],"xyz":[1.6203664011,3.2631448147,3.194407239],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7117046,0.42211213,0.64535556],"xyz":[4.7080743646,2.3832660572,5.887075888],"label":"N","properties":{}}]},"42":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.021411,0.0,0.0],[0.0,4.021411,0.0],[2.010706,2.010706,8.874517]],"pbc":[true,true,true],"a":4.021411,"b":4.021411,"c":9.3189553717,"alpha":77.5395779291,"beta":77.5395779291,"gamma":90.0,"volume":143.5164386209},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.8360282,0.8360282,0.3279436],"xyz":[4.021411164,4.021411164,2.9103410532],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.1639718,0.1639718,0.6720564],"xyz":[2.010705836,2.010705836,5.9641759468],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.6092288,0.6092288,0.7815424],"xyz":[4.0214113908,4.0214113908,6.935811315],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.3907712,0.3907712,0.2184576],"xyz":[2.0107056092,2.0107056092,1.938705685],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6124978,0.1124978,0.77500439],"xyz":[4.0214113674,2.0107058674,6.8777896341],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.1124978,0.6124978,0.77500439],"xyz":[2.0107058674,4.0214113674,6.8777896341],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3875022,0.8875022,0.22499561],"xyz":[2.0107056326,4.0214111326,1.9967273659],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.8875022,0.3875022,0.22499561],"xyz":[4.0214111326,2.0107056326,1.9967273659],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.72695695,0.72695695,0.5460861],"xyz":[4.021411273,4.021411273,4.8462503779],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.27304305,0.27304305,0.4539139],"xyz":[2.010705727,2.010705727,4.0282666221],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[2.0107055,2.0107055,0.0],"label":"N","properties":{}}]},"48":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.082063,-2.08132,0.050838],[2.082063,2.08132,0.050838],[-1.049178,0.0,9.996562]],"pbc":[true,true,true],"a":2.9443953166,"b":2.9443953166,"c":10.0514688626,"alpha":93.2468939903,"beta":93.2468939903,"gamma":89.9624752467,"volume":86.8610178892},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.4612553,0.4612553,0.29720372],"xyz":[1.6089055828,0.0,3.0179140075],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5387447,0.5387447,0.70279628],"xyz":[1.5060424172,0.0,7.0803239925],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[-0.524589,0.0,4.998281],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[1.557474,0.0,5.049119],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.95590632,0.95590632,0.27067391],"xyz":[3.6965292491,0.0,2.8030012541],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.04409368,0.04409368,0.72932609],"xyz":[-0.5815812491,0.0,7.2952367459],"label":"N","properties":{}}]},"60":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[8.736347,0.0,0.0],[0.0,8.231356,0.0],[0.0,0.0,6.998135]],"pbc":[true,true,true],"a":8.736347,"b":8.231356,"c":6.998135,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":503.2497602287},"sites":[{"species":[{"element":"N","occu":1}],"abc":[0.04933257,0.15515104,0.0],"xyz":[0.4309864499,1.277103444,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.45066743,0.65515104,0.5],"xyz":[3.9371870501,5.392781444,3.4990675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.95066743,0.84484896,0.0],"xyz":[8.3053605501,6.954252556,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.54933257,0.34484896,0.5],"xyz":[4.7991599499,2.838574556,3.4990675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.060552,0.97872251,0.5],"xyz":[0.5290032835,8.056213405,3.4990675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.439448,0.47872251,0.0],"xyz":[3.8391702165,3.940535405,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.939448,0.02127749,0.5],"xyz":[8.2073437165,0.175142595,3.4990675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.560552,0.52127749,0.0],"xyz":[4.8971767835,4.290820595,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14268832,0.43858699,0.5],"xyz":[1.2465746764,3.6101656517,3.4990675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.35731168,0.93858699,0.0],"xyz":[3.1215988236,7.7258436517,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85731168,0.56141301,0.5],"xyz":[7.4897723236,4.6211903483,3.4990675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.64268832,0.06141301,0.0],"xyz":[5.6147481764,0.5055123483,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36196035,0.18003421,0.24899865],"xyz":[3.1622112178,1.4819256747,1.7425261675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.13803965,0.68003421,0.74899865],"xyz":[1.2059622822,5.5976036747,5.2415936675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63803965,0.81996579,0.75100135],"xyz":[5.5741357822,6.7494303253,5.2556088325],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.86196035,0.31996579,0.25100135],"xyz":[7.5303847178,2.6337523253,1.7565413325],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.13803965,0.68003421,0.25100135],"xyz":[1.2059622822,5.5976036747,1.7565413325],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.63803965,0.81996579,0.24899865],"xyz":[5.5741357822,6.7494303253,1.7425261675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.86196035,0.31996579,0.74899865],"xyz":[7.5303847178,2.6337523253,5.2415936675],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36196035,0.18003421,0.75100135],"xyz":[3.1622112178,1.4819256747,5.2556088325],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.32947201,0.28836426,0.5],"xyz":[2.8783818061,2.3736288817,3.4990675],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.17052799,0.78836426,0.0],"xyz":[1.4897916939,6.4893068817,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.67052799,0.71163574,0.5],"xyz":[5.8579651939,5.8577271183,3.4990675],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.82947201,0.21163574,0.0],"xyz":[7.2465553061,1.7420491183,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.5,0.30022293],"xyz":[0.0,4.115678,2.1010005942],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5,0.0,0.80022293],"xyz":[4.3681735,0.0,5.6000680942],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.5,0.69977707],"xyz":[0.0,4.115678,4.8971344058],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5,0.0,0.19977707],"xyz":[4.3681735,0.0,1.3980669058],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.26884529,0.16402866,0.0],"xyz":[2.3487257428,1.3501782947,0.0],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.23115471,0.66402866,0.5],"xyz":[2.0194477572,5.4658562947,3.4990675],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.73115471,0.83597134,0.0],"xyz":[6.3876212572,6.8811777053,0.0],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.76884529,0.33597134,0.5],"xyz":[6.7168992428,2.7654997053,3.4990675],"label":"Ti","properties":{}}]},"72":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.839669,0.0,0.0],[0.0,5.839669,0.0],[0.0,0.0,10.063436]],"pbc":[true,true,true],"a":5.839669,"b":5.839669,"c":10.063436,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":343.1806178955},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.96905875,0.80718338,0.81186643],"xyz":[5.6589823416,4.7136837615,8.1701658589],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.03094125,0.19281662,0.31186643],"xyz":[0.1806866584,1.1259852385,3.1384478589],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.19281662,0.96905875,0.06186643],"xyz":[1.1259852385,5.6589823416,0.6225888589],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.80718338,0.03094125,0.56186643],"xyz":[4.7136837615,0.1806866584,5.6543068589],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.10899183,0.34228606,0.88023088],"xyz":[0.6364762109,1.9988372937,8.8581471261],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.89100817,0.65771394,0.38023088],"xyz":[5.2031927891,3.8408317063,3.8264291261],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.65771394,0.10899183,0.13023088],"xyz":[3.8408317063,0.6364762109,1.3105701261],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.34228606,0.89100817,0.63023088],"xyz":[1.9988372937,5.2031927891,6.3422881261],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.60631294,0.18018496,0.83510905],"xyz":[3.54066688,1.0522205252,8.4040664777],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.39368706,0.81981504,0.33510905],"xyz":[2.29900212,4.7874484748,3.3723484777],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.81981504,0.60631294,0.08510905],"xyz":[4.7874484748,3.54066688,0.8564894777],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.18018496,0.39368706,0.58510905],"xyz":[1.0522205252,2.29900212,5.8882074777],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.48525695,0.69477963,0.89229795],"xyz":[2.8337399679,4.0572830671,8.9795833128],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.51474305,0.30522037,0.39229795],"xyz":[3.0059290321,1.7823859329,3.9478653128],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.30522037,0.48525695,0.14229795],"xyz":[1.7823859329,2.8337399679,1.4320063128],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.69477963,0.51474305,0.64229795],"xyz":[4.0572830671,3.0059290321,6.4637243128],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.34294622,0.11501552,0.23713654],"xyz":[2.0026924096,0.6716525667,2.3864083936],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.65705378,0.88498448,0.73713654],"xyz":[3.8369765904,5.1680164333,7.4181263936],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.88498448,0.34294622,0.48713654],"xyz":[5.1680164333,2.0026924096,4.9022673936],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.11501552,0.65705378,0.98713654],"xyz":[0.6716525667,3.8369765904,9.9339853936],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.73779301,0.97899975,0.33796876],"xyz":[4.3084669689,5.7170344911,3.4011269863],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26220699,0.02100025,0.83796876],"xyz":[1.5312020311,0.1226345089,8.4328449863],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02100025,0.73779301,0.58796876],"xyz":[0.1226345089,4.3084669689,5.9169859863],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97899975,0.26220699,0.08796876],"xyz":[5.7170344911,1.5312020311,0.8852679863],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00065757,0.82328758,0.21040091],"xyz":[0.0038399911,4.807726959,2.1173560921],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99934243,0.17671242,0.71040091],"xyz":[5.8358290089,1.031942041,7.1490740921],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17671242,0.00065757,0.46040091],"xyz":[1.031942041,0.0038399911,4.6332150921],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82328758,0.99934243,0.96040091],"xyz":[4.807726959,5.8358290089,9.6649330921],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55444204,0.73450842,0.50475735],"xyz":[3.2377579933,4.2892860505,5.0795932873],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44555796,0.26549158,0.00475735],"xyz":[2.6019110067,1.5503829495,0.0478752873],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26549158,0.55444204,0.75475735],"xyz":[1.5503829495,3.2377579933,7.5954522873],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.73450842,0.44555796,0.25475735],"xyz":[4.2892860505,2.6019110067,2.5637342873],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51196313,0.78128955,0.10023213],"xyz":[2.9896952194,4.5624723652,1.0086796254],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48803687,0.21871045,0.60023213],"xyz":[2.8499737806,1.2771966348,6.0403976254],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21871045,0.51196313,0.35023213],"xyz":[1.2771966348,2.9896952194,3.5245386254],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.78128955,0.48803687,0.85023213],"xyz":[4.5624723652,2.8499737806,8.5562566254],"label":"N","properties":{}}]},"51":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.383894,0.0,0.0],[0.0,7.84233,0.0],[3.191947,3.921165,4.697699]],"pbc":[true,true,true],"a":6.383894,"b":7.84233,"c":6.901625642,"alpha":55.3786153986,"beta":62.4519677107,"gamma":90.0,"volume":235.1884374827},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.25,0.75,0.5],"xyz":[3.191947,7.84233,2.3488495],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.75,0.25,0.5],"xyz":[6.383894,3.921165,2.3488495],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.26264823,0.24098197,0.0],"xyz":[1.6767184596,1.8898601328,0.0],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.23735177,0.74098197,1.0],"xyz":[4.7071755404,9.7321901328,4.697699],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.76264823,0.25901803,0.0],"xyz":[4.8686654596,2.0313048672,0.0],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.73735177,0.75901803,1.0],"xyz":[7.8991225404,9.8736348672,4.697699],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75,0.75,0.5],"xyz":[6.383894,7.84233,2.3488495],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25,0.25,0.5],"xyz":[3.191947,3.921165,2.3488495],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99047279,0.08221216,1.0],"xyz":[9.5150203012,4.5658998887,4.697699],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.50952721,0.58221216,0.0],"xyz":[3.2527676988,4.5658998887,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.49047279,0.41778784,1.0],"xyz":[6.3230733012,7.1975951113,4.697699],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00952721,0.91778784,0.0],"xyz":[0.0608206988,7.1975951113,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.08382932,0.45000872,1.0],"xyz":[3.727104493,7.4502818851,4.697699],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41617068,0.95000872,0.0],"xyz":[2.656789507,7.4502818851,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58382932,0.04999128,1.0],"xyz":[6.919051493,4.3132131149,4.697699],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.91617068,0.54999128,0.0],"xyz":[5.848736507,4.3132131149,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.94713593,0.03445718,0.57572495],"xyz":[7.8840989077,2.5277371,2.7045825219],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55286407,0.11018214,0.42427505],"xyz":[4.8836890923,2.5277371784,1.9931164781],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.02286088,0.46554282,0.42427505],"xyz":[1.5002049077,5.3145929,1.9931164781],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.52286088,0.61018214,0.42427505],"xyz":[4.6921519077,6.4489021784,1.9931164781],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.97713912,0.53445718,0.57572495],"xyz":[8.0756360923,6.4489021,2.7045825219],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44713593,0.88981786,0.57572495],"xyz":[4.6921519077,9.2357578216,2.7045825219],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.05286407,0.96554282,0.42427505],"xyz":[1.6917420923,9.2357579,1.9931164781],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.47713912,0.38981786,0.57572495],"xyz":[4.8836890923,5.3145928216,2.7045825219],"label":"N","properties":{}}]},"53":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.166867,0.0,6.757404],[-1.583433,2.742587,6.757404],[-1.583433,-2.742587,6.757404]],"pbc":[true,true,true],"a":7.4626774964,"b":7.4626772902,"c":7.4626772902,"alpha":43.1239130362,"beta":43.1239122091,"gamma":43.1239122091,"volume":176.0724191204},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.01183712,0.01183712,0.01183712],"xyz":[0.0000000118,0.0,0.2399646061],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.17509278,0.17509278,0.17509278],"xyz":[0.0000001751,0.0,3.5495179558],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.58822661,0.58822661,0.58822661],"xyz":[0.0000005882,0.0,11.924654542],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.44824029,0.44824029,0.44824029],"xyz":[0.0000004482,0.0,9.0868221858],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.88012936,0.88012936,0.88012936],"xyz":[0.0000008801,0.0,17.8421689733],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.73794629,0.73794629,0.73794629],"xyz":[0.0000007379,0.0,14.9598036355],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.30888986,0.30888986,0.30888986],"xyz":[0.0000003089,0.0,6.2618807266],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.22038392,0.96628227,0.59433793],"xyz":[-1.7732109616,1.0200897116,12.0349643645],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.96628227,0.59433793,0.22038392],"xyz":[1.7700299704,1.0256014064,12.0349643645],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.59433793,0.22038392,0.96628227],"xyz":[0.0031827721,-2.045691118,12.0349643645],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.10520064,0.47388568,0.80909796],"xyz":[-1.6983621988,-0.9193488414,9.3805220064],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.47388568,0.80909796,0.10520064],"xyz":[0.0530023467,1.9304996392,9.3805220064],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.80909796,0.10520064,0.47388568],"xyz":[1.6453612404,-1.0111507978,9.3805220064],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07908029,0.3786331,0.71223592],"xyz":[-1.4768812442,-0.9149347573,7.9058201472],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3786331,0.71223592,0.07908029],"xyz":[-0.0539155309,1.7364843998,7.9058201472],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71223592,0.07908029,0.3786331],"xyz":[1.530797945,-0.8215496425,7.9058201472],"label":"N","properties":{}}]},"20":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[14.680227,-1.507597,-0.760453],[14.680227,1.507597,-0.760453],[-7.316016,0.0,9.877532]],"pbc":[true,true,true],"a":14.7770160131,"b":14.7770160131,"c":12.2918561871,"alpha":129.2457249808,"beta":129.2457249808,"gamma":11.7113631649,"volume":420.4414423578},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.36914484,0.36914484,0.97637487],"xyz":[3.6950859232,0.0,9.0827394204],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.63085516,0.63085516,0.02362513],"xyz":[18.3493520768,0.0,-0.7261134204],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.48270716,0.48270716,0.65034958],"xyz":[9.4145334338,0.0,5.6896965717],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.51729284,0.51729284,0.34965042],"xyz":[12.6299045662,0.0,2.6669294283],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.29723292,0.29723292,0.6778237],"xyz":[3.7679244406,0.0,6.2431619557],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.70276708,0.70276708,0.3221763],"xyz":[18.2765135594,0.0,2.1134640443],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.90549748,0.90549748,0.3038491],"xyz":[24.3628522315,0.0,1.6241026581],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.09450252,0.09450252,0.6961509],"xyz":[-2.3184142315,0.0,6.7325233419],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.24540401,0.24540401,0.1840197],"xyz":[5.8588820775,0.0,1.4444240441],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75459599,0.75459599,0.8159803],"xyz":[16.1855559225,0.0,6.9122019559],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.16410137,0.16410137,0.49746173],"xyz":[1.1786527492,0.0,4.6641113986],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.83589863,0.83589863,0.50253827],"xyz":[20.8657852508,0.0,3.6925146014],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.20389767,0.20389767,0.90895922],"xyz":[-0.6634320361,0.0,8.6681645926],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.79610233,0.79610233,0.09104078],"xyz":[22.7078700361,0.0,-0.3115385926],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.16237373,0.16237373,0.99331877],"xyz":[-2.4997695839,0.0,9.5645827567],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.83762627,0.83762627,0.00668123],"xyz":[24.5442075839,0.0,-1.2079567567],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.35419025,0.35419025,0.23475963],"xyz":[8.6816813331,0.0,1.7801556813],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.64580975,0.64580975,0.76524037],"xyz":[13.3627566669,0.0,6.5764703187],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.15175152,0.15175152,0.18211561],"xyz":[3.1231328058,0.0,1.5680529682],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.84824848,0.84824848,0.81788439],"xyz":[18.9213051942,0.0,6.7885730318],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.29589949,0.29589949,0.52234703],"xyz":[4.8662441357,0.0,4.7094641942],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.70410051,0.70410051,0.47765297],"xyz":[17.1781938643,0.0,3.6471618058],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07845619,0.07845619,0.41454019],"xyz":[-0.7292733052,0.0,3.9753095019],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92154381,0.92154381,0.58545981],"xyz":[22.7737113052,0.0,4.3813164981],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.23587806,0.23587806,0.70148934],"xyz":[1.793379695,0.0,6.5702350468],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.76412194,0.76412194,0.29851066],"xyz":[20.251058305,0.0,1.7863909532],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.04432356,0.04432356,0.75256226],"xyz":[-4.2043976907,0.0,7.3660458368],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.95567644,0.95567644,0.24743774],"xyz":[26.2488356907,0.0,0.9905801632],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.93768367,0.93768367,0.50017113],"xyz":[23.8715582698,0.0,3.5143276222],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.06231633,0.06231633,0.49982887],"xyz":[-1.8271202698,0.0,4.8422983778],"label":"N","properties":{}}]},"32":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.730469,-4.584523,-0.342761],[6.730469,4.584523,-0.342761],[-1.806793,0.0,5.356055]],"pbc":[true,true,true],"a":8.1507391812,"b":8.1507391812,"c":5.652594635,"alpha":107.6853139101,"beta":107.6853139101,"gamma":68.4531791678,"volume":324.8543848442},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.7141318,0.2858682,0.25],"xyz":[6.27877075,-1.9633843243,0.99625275],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.2858682,0.7141318,0.75],"xyz":[5.37537425,1.9633843243,3.67428025],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.06304672,0.16684276,0.66757928],"xyz":[0.3410864485,0.4758553327,3.4967941925],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.83315724,0.93695328,0.83242072],"xyz":[10.4096620515,0.4758553327,3.8517663075],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.93695328,0.83315724,0.33242072],"xyz":[11.3130585515,-0.4758553327,1.1737388075],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.16684276,0.06304672,0.16757928],"xyz":[1.2444829485,-0.4758553327,0.8187666925],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.26619824,0.44058687,0.15513109],"xyz":[4.476705505,0.7994886852,0.5886322792],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.55941313,0.73380176,0.34486891],"xyz":[8.080835995,0.7994886852,1.4038732208],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.73380176,0.55941313,0.84486891],"xyz":[7.177439495,-0.7994886852,4.0819007208],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.44058687,0.26619824,0.65513109],"xyz":[3.573309005,-0.7994886852,3.2666597792],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.13372099,0.26871112,0.03056721],"xyz":[2.6533282199,0.6188653558,0.0257816255],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.73128888,0.86627901,0.46943279],"xyz":[9.9042132801,0.6188653558,1.9667238745],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.86627901,0.73128888,0.96943279],"xyz":[9.0008167801,-0.6188653558,4.6447513745],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26871112,0.13372099,0.53056721],"xyz":[1.7499317199,-0.6188653558,2.7038091255],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31540762,0.4836684,0.86537518],"xyz":[3.8146025637,0.7713954159,4.361104964],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5163316,0.68459238,0.63462482],"xyz":[6.9361459363,0.7713954159,2.987455536],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68459238,0.5163316,0.13462482],"xyz":[7.8395424363,-0.7713954159,0.309428036],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.4836684,0.31540762,0.36537518],"xyz":[4.7179990637,-0.7713954159,1.683077464],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.84326964,0.35643738,0.60951799],"xyz":[6.9733180695,-2.2318936931,2.8533991],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.64356262,0.15673036,0.89048201],"xyz":[3.7774304305,-2.2318936931,4.4951614],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.15673036,0.64356262,0.39048201],"xyz":[4.6808269305,2.2318936931,1.8171339],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.35643738,0.84326964,0.10951799],"xyz":[7.8767145695,2.2318936931,0.1753716],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.95866177,0.04133823,0.25],"xyz":[6.27877075,-4.2054908676,0.99625275],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.04133823,0.95866177,0.75],"xyz":[5.37537425,4.2054908676,3.67428025],"label":"N","properties":{}}]},"41":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.776201,-3.912241,0.0],[0.0,7.824483,0.0],[0.0,0.0,4.868194]],"pbc":[true,true,true],"a":7.8244827071,"b":7.824483,"c":4.868194,"alpha":90.0,"beta":90.0,"gamma":119.9999970104,"volume":258.1129579999},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.43304785,1.0,0.90142116],"xyz":[2.9344192742,6.1302954463,4.3882930826],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.56695215,0.56695215,0.90142116],"xyz":[3.8417817258,2.2180540132,4.3882930826],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.43304785,0.90142116],"xyz":[0.0,3.3883755405,4.3882930826],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.73676343,1.0,0.46239314],"xyz":[4.9924570911,4.9420869019,2.2510195098],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.26323657,0.26323657,0.46239314],"xyz":[1.7837439089,1.0298451651,2.2510195098],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.73676343,0.46239314],"xyz":[0.0,5.7647929331,2.2510195098],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.33333333,0.66666667,0.4807268],"xyz":[2.2587336441,3.9122417058,2.3402713234],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.66666667,0.33333333,0.4807268],"xyz":[4.5174673559,0.0000002942,2.3402713234],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.54692646,0.0,0.24748564],"xyz":[3.7060836252,-2.1397081208,1.2048081077],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.45307354,0.45307354,0.24748564],"xyz":[3.0701173748,1.7725333323,1.2048081077],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.54692646,0.24748564],"xyz":[0.0,4.2794167885,1.2048081077],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.20794832,0.42235553,0.6827911],"xyz":[1.4090996139,2.4911697211,3.3239595363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.21440721,0.79205168,0.6827911],"xyz":[1.4528663508,5.3585822276,3.3239595363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.57764447,0.78559279,0.6827911],"xyz":[3.9142350353,3.8869730513,3.3239595363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.79205168,0.21440721,0.6827911],"xyz":[5.3671013861,-1.4210714869,3.3239595363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.42235553,0.20794832,0.6827911],"xyz":[2.8619659647,-0.0252685263,3.3239595363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.78559279,0.57764447,0.6827911],"xyz":[5.3233346492,1.4463410132,3.3239595363],"label":"N","properties":{}}]},"58":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.112473,-0.000003,2.815429],[-2.556234,4.427533,2.815429],[-2.556238,-4.42753,2.815429]],"pbc":[true,true,true],"a":5.8364390368,"b":5.8364390841,"c":5.8364385603,"alpha":98.6821353837,"beta":98.6821214653,"gamma":98.6821310851,"volume":191.1870592868},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.55169467,0.35282435,0.16914522],"xyz":[1.4862470662,0.8132442618,3.0228254376],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.64717565,0.83085478,0.44830533],"xyz":[0.038833679,1.6937497174,5.4234615624],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.83085478,0.44830533,0.64717565],"xyz":[1.4474143135,-0.8805054556,5.4234615624],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.16914522,0.55169467,0.35282435],"xyz":[-1.4474133135,0.8805054556,3.0228254376],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.35282435,0.16914522,0.55169467],"xyz":[-0.038832679,-1.6937497174,3.0228254376],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.44830533,0.64717565,0.83085478],"xyz":[-1.4862460662,-0.8132442618,5.4234615624],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.22107771,0.22107771,0.22107771],"xyz":[0.0000002211,1.110223025e-16,1.867285788],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.77892229,0.77892229,0.77892229],"xyz":[0.0000007789,4.440892099e-16,6.579001212],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.15262017,0.41165775,0.66079431],"xyz":[-1.9611745639,-1.1030588164,3.4491038834],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58834225,0.33920569,0.84737983],"xyz":[-0.0253097718,-2.2499569975,4.9971831166],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33920569,0.84737983,0.58834225],"xyz":[-1.9358640172,1.1468981811,4.9971831166],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66079431,0.15262017,0.41165775],"xyz":[1.9358650172,-1.1468981811,3.4491038834],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41165775,0.66079431,0.15262017],"xyz":[0.0253107718,2.2499569975,3.4491038834],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.84737983,0.58834225,0.33920569],"xyz":[1.9611755639,1.1030588164,4.9971831166],"label":"N","properties":{}}]},"65":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[1.739255,-2.701998,0.0],[1.739255,2.701998,0.0],[0.0,0.0,44.970811]],"pbc":[true,true,true],"a":3.2133784631,"b":3.2133784631,"c":44.970811,"alpha":90.0,"beta":90.0,"gamma":114.4618654814,"volume":422.6773725521},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.65303539,0.34696461,0.05235786],"xyz":[1.739255,-0.8270026354,2.3545754264],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.34696461,0.65303539,0.55235786],"xyz":[1.739255,0.8270026354,24.8399809264],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.01589023,0.98410977,0.10015629],"xyz":[1.739255,2.6161272606,4.5041095881],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.98410977,0.01589023,0.60015629],"xyz":[1.739255,-2.6161272606,26.9895150881],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.65177435,0.34822565,0.14624567],"xyz":[1.739255,-0.8201879803,6.5767863851],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.34822565,0.65177435,0.64624567],"xyz":[1.739255,0.8201879803,29.0621918851],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.06378092,0.93621908,0.26386996],"xyz":[1.739255,2.3573261634,11.8664460997],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.93621908,0.06378092,0.76386996],"xyz":[1.739255,-2.3573261634,34.3518515997],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.70119409,0.29880591,0.30755386],"xyz":[1.739255,-1.0872520576,13.8309465104],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.29880591,0.70119409,0.80755386],"xyz":[1.739255,1.0872520576,36.3163520104],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.97953586,0.02046414,0.41091222],"xyz":[1.739255,-2.5914098693,18.4790557832],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.02046414,0.97953586,0.91091222],"xyz":[1.739255,2.5914098693,40.9644612832],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.6395319,0.3604681,0.46581246],"xyz":[1.739255,-0.7540298295,20.9479641001],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.3604681,0.6395319,0.96581246],"xyz":[1.739255,0.7540298295,43.4333696001],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.00687154,0.99312846,0.00904892],"xyz":[1.739255,2.6648642253,0.4069372711],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.99312846,0.00687154,0.50904892],"xyz":[1.739255,-2.6648642253,22.8923427711],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.71355352,0.28644648,0.21967736],"xyz":[1.739255,-1.1540423679,9.8790690375],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.28644648,0.71355352,0.71967736],"xyz":[1.739255,1.1540423679,32.3644745375],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.08167077,0.91832923,0.35281686],"xyz":[1.739255,2.2606494856,15.8664603287],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.91832923,0.08167077,0.85281686],"xyz":[1.739255,-2.2606494856,38.3518658287],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66270201,0.33729799,0.09953666],"xyz":[1.739255,-0.8792410112,4.4762443244],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33729799,0.66270201,0.59953666],"xyz":[1.739255,0.8792410112,26.9616498244],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0026691,0.9973309,0.1493108],"xyz":[1.739255,2.6875741943,6.7146277671],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.9973309,0.0026691,0.6493108],"xyz":[1.739255,-2.6875741943,29.2000332671],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62990179,0.37009821,0.4228011],"xyz":[1.739255,-0.7019887536,19.0137083587],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37009821,0.62990179,0.9228011],"xyz":[1.739255,0.7019887536,41.4991138587],"label":"N","properties":{}}]},"25":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[7.625926,0.0,0.076043],[0.0,7.580728,0.0],[3.767819,3.790364,3.834359]],"pbc":[true,true,true],"a":7.6263051273,"b":7.580728,"c":6.5776613025,"alpha":54.8129244902,"beta":54.6475473746,"gamma":90.0,"volume":219.4925632504},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[3.812963,3.790364,0.0380215],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5,0.0,0.0],"xyz":[3.812963,0.0,0.0380215],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.5,0.0],"xyz":[0.0,3.790364,0.0],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[5.6968725,5.685546,1.955201],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[5.6968725,1.895182,1.955201],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[1.8839095,1.895182,1.9171795],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[1.8839095,5.685546,1.9171795],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17462695,0.86728018,0.65081407],"xyz":[3.7838418167,9.041437366,2.5087339438],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82537305,0.51809424,0.34918593],"xyz":[7.6099031833,5.2510732902,1.4016680562],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82537305,0.13271982,0.34918593],"xyz":[7.6099031833,2.329654634,1.4016680562],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17462695,0.48190576,0.65081407],"xyz":[3.7838418167,6.1200187098,2.5087339438],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.50337766,0.68510006,0.62979988],"xyz":[6.2116927393,7.580728,2.4531571855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.49662234,0.31489994,0.37020012],"xyz":[5.1820522607,3.790364,1.4572448145],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.86607696,0.69069681,0.61860638],"xyz":[8.9354356794,7.580728,2.4378180309],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.13392304,0.30930319,0.38139362],"xyz":[2.4583093206,3.790364,1.4725839691],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68829538,0.82298879,0.99962863],"xyz":[9.0153093791,10.0278105366,3.8852750797],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31170462,0.82261742,0.00037137],"xyz":[2.3784356209,6.2374465366,0.0251269203],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31170462,0.17701121,0.00037137],"xyz":[2.3784356209,1.3432814634,0.0251269203],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68829538,0.17738258,0.99962863],"xyz":[9.0153093791,5.1336454634,3.8852750797],"label":"N","properties":{}}]},"23":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.889034,-4.949055,0.0],[2.889034,4.949055,0.0],[0.0,0.0,10.531082]],"pbc":[true,true,true],"a":5.7305900958,"b":5.7305900958,"c":10.531082,"alpha":90.0,"beta":90.0,"gamma":119.4511081359,"volume":301.1465715564},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.9490353,0.0509647,0.16283211],"xyz":[2.889034,-4.4446007933,1.7147983026],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5509647,0.4490353,0.66283211],"xyz":[2.889034,-0.5044542067,6.9803393026],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.4490353,0.5509647,0.33716789],"xyz":[2.889034,0.5044542067,3.5507426974],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0509647,0.9490353,0.83716789],"xyz":[2.889034,4.4446007933,8.8162836974],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.63746097,0.36253903,0.10209048],"xyz":[2.889034,-1.3606038018,1.0751232163],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.86253903,0.13746097,0.60209048],"xyz":[2.889034,-3.5884511982,6.3406642163],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.13746097,0.86253903,0.39790952],"xyz":[2.889034,3.5884511982,4.1904177837],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.36253903,0.63746097,0.89790952],"xyz":[2.889034,1.3606038018,9.4559587837],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.75230031,0.24769969,0.35600488],"xyz":[2.889034,-2.4972962214,3.7491165837],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.74769969,0.25230031,0.85600488],"xyz":[2.889034,-2.4517587786,9.0146575837],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.25230031,0.74769969,0.14399512],"xyz":[2.889034,2.4517587786,1.5164244163],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.24769969,0.75230031,0.64399512],"xyz":[2.889034,2.4972962214,6.7819654163],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.67082105,0.32917895,0.51925674],"xyz":[2.889034,-1.6908055432,5.468335308],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.82917895,0.17082105,0.01925674],"xyz":[2.889034,-3.2582494568,0.202794308],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.17082105,0.82917895,0.98074326],"xyz":[2.889034,3.2582494568,10.328287692],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.32917895,0.67082105,0.48074326],"xyz":[2.889034,1.6908055432,5.062746692],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.94589238,0.05410762,0.35185694],"xyz":[2.889034,-4.4134918254,3.7054342874],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55410762,0.44589238,0.85185694],"xyz":[2.889034,-0.5355631746,8.9709752874],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44589238,0.55410762,0.14814306],"xyz":[2.889034,0.5355631746,1.5601067126],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.05410762,0.94589238,0.64814306],"xyz":[2.889034,4.4134918254,6.8256477126],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.93929385,0.56070615,0.25],"xyz":[4.333551,-1.8736513496,2.6327705],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.56070615,0.93929385,0.75],"xyz":[4.333551,1.8736513496,7.8983115],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.43929385,0.06070615,0.25],"xyz":[1.444517,-1.8736513496,2.6327705],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.06070615,0.43929385,0.75],"xyz":[1.444517,1.8736513496,7.8983115],"label":"N","properties":{}}]},"24":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.275648,-3.88791,0.0],[4.275648,3.88791,0.0],[0.0,0.0,4.969047]],"pbc":[true,true,true],"a":5.7790146209,"b":5.7790146209,"c":4.969047,"alpha":90.0,"beta":90.0,"gamma":84.5614233138,"volume":165.2042620041},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.40001196,0.59998804,0.25],"xyz":[4.275648,0.7774890012,1.24226175],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.59998804,0.40001196,0.75],"xyz":[4.275648,-0.7774890012,3.72678525],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.83644128,0.83644128,0.0],"xyz":[7.1526569719,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.16355872,0.16355872,0.5],"xyz":[1.3986390281,0.0,2.4845235],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.83644128,0.83644128,0.5],"xyz":[7.1526569719,0.0,2.4845235],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.16355872,0.16355872,0.0],"xyz":[1.3986390281,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.89385404,0.10614596,0.25],"xyz":[4.275648,-3.0625381213,1.24226175],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.10614596,0.89385404,0.75],"xyz":[4.275648,3.0625381213,3.72678525],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71612659,0.59086281,0.25],"xyz":[5.5882266141,-0.4870143029,1.24226175],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28387341,0.40913719,0.75],"xyz":[2.9630693859,0.4870143029,3.72678525],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.59086281,0.71612659,0.75],"xyz":[5.5882266141,0.4870143029,3.72678525],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.40913719,0.28387341,0.25],"xyz":[2.9630693859,-0.4870143029,1.24226175],"label":"N","properties":{}}]},"15":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[1.887732,-8.293794,0.0],[1.887732,8.293794,0.0],[0.0,0.0,10.903555]],"pbc":[true,true,true],"a":8.5059127093,"b":8.5059127093,"c":10.903555,"alpha":90.0,"beta":90.0,"gamma":154.3549625935,"volume":341.4221527405},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.77771064,0.22228936,0.25],"xyz":[1.887732,-4.6065496795,2.72588875],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.22228936,0.77771064,0.75],"xyz":[1.887732,4.6065496795,8.17766625],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.76640818,0.23359182,0.58357468],"xyz":[1.887732,-4.4190691297,6.36303862],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.23359182,0.76640818,0.08357468],"xyz":[1.887732,4.4190691297,0.91126112],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.23359182,0.76640818,0.41642532],"xyz":[1.887732,4.4190691297,4.54051638],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.76640818,0.23359182,0.91642532],"xyz":[1.887732,-4.4190691297,9.99229388],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.31288974,0.68711026,0.25],"xyz":[1.887732,3.1037079035,2.72588875],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.68711026,0.31288974,0.75],"xyz":[1.887732,-3.1037079035,8.17766625],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00945486,0.99054514,0.19890372],"xyz":[1.887732,8.1369606777,2.1687576507],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99054514,0.00945486,0.69890372],"xyz":[1.887732,-8.1369606777,7.6205351507],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.99054514,0.00945486,0.80109628],"xyz":[1.887732,-8.1369606777,8.7347973493],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.00945486,0.99054514,0.30109628],"xyz":[1.887732,8.1369606777,3.2830198493],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71261595,0.28738405,0.10220736],"xyz":[1.887732,-3.5267857808,1.1144235712],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28738405,0.71261595,0.60220736],"xyz":[1.887732,3.5267857808,6.5662010712],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28738405,0.71261595,0.89779264],"xyz":[1.887732,3.5267857808,9.7891314288],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71261595,0.28738405,0.39779264],"xyz":[1.887732,-3.5267857808,4.3373539288],"label":"N","properties":{}}]},"18":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.730114,-1.576232,0.0],[0.0,3.152464,0.0],[0.0,0.0,11.873833]],"pbc":[true,true,true],"a":3.1524640792,"b":3.152464,"c":11.873833,"alpha":90.0,"beta":90.0,"gamma":119.9999991686,"volume":102.1931660622},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.0,0.28482879],"xyz":[0.0,0.0,3.3820094861],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.0,0.71517121],"xyz":[0.0,0.0,8.4918235139],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33333333,0.66666667,0.33039369],"xyz":[0.9100379909,1.5762320158,3.9230394993],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66666667,0.33333333,0.66960631],"xyz":[1.8200760091,-0.0000000158,7.9507935007],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66666667,0.33333333,0.08508663],"xyz":[1.8200760091,-0.0000000158,1.0103044352],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.33333333,0.66666667,0.91491337],"xyz":[0.9100379909,1.5762320158,10.8635285648],"label":"Zn","properties":{}}]},"38":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[-4.2267,-4.2267,0.0],[-4.2267,0.0,-4.2267],[0.0,-4.2267,-4.2267]],"pbc":[true,true,true],"a":5.9774564641,"b":5.9774564641,"c":5.9774564641,"alpha":60.0,"beta":60.0,"gamma":60.0,"volume":151.0199308963},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.875,0.875,0.875],"xyz":[-7.396725,-7.396725,-7.396725],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.125,0.125,0.125],"xyz":[-1.056675,-1.056675,-1.056675],"label":"Zn","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.625,0.625,0.625],"xyz":[-5.283375,-5.283375,-5.283375],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.375,0.375,0.375],"xyz":[-3.170025,-3.170025,-3.170025],"label":"Ti","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.0],"xyz":[-2.11335,0.0,-2.11335],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.0,0.0],"xyz":[-2.11335,-2.11335,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[0.0,-2.11335,-2.11335],"label":"N","properties":{}}]},"8":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[7.6852,0.0,0.0],[0.0,7.6852,0.0],[0.0,0.0,7.6852]],"pbc":[true,true,true],"a":7.6852,"b":7.6852,"c":7.6852,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":453.9055805822},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.00179104,0.00179104,0.00179104],"xyz":[0.0137645006,0.0137645006,0.0137645006],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.49820896,0.99820896,0.50179104],"xyz":[3.8288354994,7.6714354994,3.8563645006],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.50179104,0.49820896,0.99820896],"xyz":[3.8563645006,3.8288354994,7.6714354994],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.99820896,0.50179104,0.49820896],"xyz":[7.6714354994,3.8563645006,3.8288354994],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.47336587,0.47336587,0.47336587],"xyz":[3.6379113841,3.6379113841,3.6379113841],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.02663413,0.52663413,0.97336587],"xyz":[0.2046886159,4.0472886159,7.4805113841],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.97336587,0.02663413,0.52663413],"xyz":[7.4805113841,0.2046886159,4.0472886159],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.52663413,0.97336587,0.02663413],"xyz":[4.0472886159,7.4805113841,0.2046886159],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.29008367,0.29008367,0.29008367],"xyz":[2.2293510207,2.2293510207,2.2293510207],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.20991633,0.70991633,0.79008367],"xyz":[1.6132489793,5.4558489793,6.0719510207],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.79008367,0.20991633,0.70991633],"xyz":[6.0719510207,1.6132489793,5.4558489793],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.70991633,0.79008367,0.20991633],"xyz":[5.4558489793,6.0719510207,1.6132489793],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75881592,0.75881592,0.75881592],"xyz":[5.8316521084,5.8316521084,5.8316521084],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.74118408,0.24118408,0.25881592],"xyz":[5.6961478916,1.8535478916,1.9890521084],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25881592,0.74118408,0.24118408],"xyz":[1.9890521084,5.6961478916,1.8535478916],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.24118408,0.25881592,0.74118408],"xyz":[1.8535478916,1.9890521084,5.6961478916],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.23092657,0.11049583,0.08125003],"xyz":[1.7747168758,0.8491825527,0.6244227306],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41874997,0.76907343,0.61049583],"xyz":[3.2181772694,5.9104831242,4.6917825527],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58125003,0.26907343,0.88950417],"xyz":[4.4670227306,2.0678831242,6.8360174473],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.91874997,0.73092657,0.38950417],"xyz":[7.0607772694,5.6173168758,2.9934174473],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.11049583,0.08125003,0.23092657],"xyz":[0.8491825527,0.6244227306,1.7747168758],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.38950417,0.91874997,0.73092657],"xyz":[2.9934174473,7.0607772694,5.6173168758],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.76907343,0.61049583,0.41874997],"xyz":[5.9104831242,4.6917825527,3.2181772694],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.08125003,0.23092657,0.11049583],"xyz":[0.6244227306,1.7747168758,0.8491825527],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26907343,0.88950417,0.58125003],"xyz":[2.0678831242,6.8360174473,4.4670227306],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.73092657,0.38950417,0.91874997],"xyz":[5.6173168758,2.9934174473,7.0607772694],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.61049583,0.41874997,0.76907343],"xyz":[4.6917825527,3.2181772694,5.9104831242],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.88950417,0.58125003,0.26907343],"xyz":[6.8360174473,4.4670227306,2.0678831242],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75939082,0.03937817,0.09224158],"xyz":[5.8360703299,0.3026291121,0.7088949906],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.40775842,0.24060918,0.53937817],"xyz":[3.1337050094,1.8491296701,4.1452291121],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.59224158,0.74060918,0.96062183],"xyz":[4.5514949906,5.6917296701,7.3825708879],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.90775842,0.25939082,0.46062183],"xyz":[6.9763050094,1.9934703299,3.5399708879],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.03937817,0.09224158,0.75939082],"xyz":[0.3026291121,0.7088949906,5.8360703299],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.46062183,0.90775842,0.25939082],"xyz":[3.5399708879,6.9763050094,1.9934703299],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24060918,0.53937817,0.40775842],"xyz":[1.8491296701,4.1452291121,3.1337050094],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.09224158,0.75939082,0.03937817],"xyz":[0.7088949906,5.8360703299,0.3026291121],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.74060918,0.96062183,0.59224158],"xyz":[5.6917296701,7.3825708879,4.5514949906],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25939082,0.46062183,0.90775842],"xyz":[1.9934703299,3.5399708879,6.9763050094],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.53937817,0.40775842,0.24060918],"xyz":[4.1452291121,3.1337050094,1.8491296701],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.96062183,0.59224158,0.74060918],"xyz":[7.3825708879,4.5514949906,5.6917296701],"label":"N","properties":{}}]},"36":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.058315,-4.469731,0.0],[3.058315,4.469731,0.0],[0.0,0.0,6.091423]],"pbc":[true,true,true],"a":5.4158827398,"b":5.4158827398,"c":6.091423,"alpha":90.0,"beta":90.0,"gamma":111.2379485004,"volume":166.5376209045},"sites":[{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Ti","properties":{}},{"species":[{"element":"Ti","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[0.0,0.0,3.0457115],"label":"Ti","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.61502096,0.38497904,0.25],"xyz":[3.058315,-1.0282255011,1.52285575],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.38497904,0.61502096,0.75],"xyz":[3.058315,1.0282255011,4.56856725],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.77707723,0.22292277,0.02604294],"xyz":[3.058315,-2.4769213687,0.1586385637],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.22292277,0.77707723,0.52604294],"xyz":[3.058315,2.4769213687,3.2043500637],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.22292277,0.77707723,0.97395706],"xyz":[3.058315,2.4769213687,5.9327844363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.77707723,0.22292277,0.47395706],"xyz":[3.058315,-2.4769213687,2.8870729363],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.79819076,0.7634284,0.25],"xyz":[4.7759233013,-0.1553783981,1.52285575],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.20180924,0.2365716,0.75],"xyz":[1.3407066987,0.1553783981,4.56856725],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7634284,0.79819076,0.75],"xyz":[4.7759233013,0.1553783981,4.56856725],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2365716,0.20180924,0.25],"xyz":[1.3407066987,-0.1553783981,1.52285575],"label":"N","properties":{}}]},"43":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.443685,-1.410862,0.0],[0.0,2.821725,0.0],[0.0,0.0,4.305149]],"pbc":[true,true,true],"a":2.8217242888,"b":2.821725,"c":4.305149,"alpha":90.0,"beta":90.0,"gamma":119.9999966138,"volume":29.6857547944},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.33333333,0.66666667,0.75],"xyz":[0.8145616585,1.4108626808,3.22886175],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66666667,0.33333333,0.25],"xyz":[1.6291233415,0.0000003192,1.07628725],"label":"Zn","properties":{}}]},"1":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.800434,-1.616831,0.0],[0.0,3.233663,0.0],[0.0,0.0,5.166609]],"pbc":[true,true,true],"a":3.2336624856,"b":3.233663,"c":5.166609,"alpha":90.0,"beta":90.0,"gamma":119.9999950322,"volume":46.787053474},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.33333333,0.66666667,0.75],"xyz":[0.9334779907,1.6168316828,3.87495675],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.66666667,0.33333333,0.25],"xyz":[1.8669560093,0.0000003172,1.29165225],"label":"Zr","properties":{}}]},"22":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.503549,-2.105416,0.30612],[5.503549,2.105416,0.30612],[-3.212949,0.0,5.665865]],"pbc":[true,true,true],"a":5.900469268,"b":5.900469268,"c":6.5134528074,"alpha":114.5172354874,"beta":114.5172354874,"gamma":41.8102779978,"volume":135.4452583078},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.33909577,0.33909577,0.8882145],"xyz":[0.8786724822,0.0,5.2401114423],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.66090423,0.66090423,0.1117855],"xyz":[6.9154765178,0.0,1.0379935577],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.01117193,0.01117193,0.73206145],"xyz":[-2.2291055754,0.0,4.1546012498],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.98882807,0.98882807,0.26793855],"xyz":[10.0232545754,0.0,2.1235037502],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.33875302,0.33875302,0.40873122],"xyz":[2.4154551244,0.0,2.5232140628],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66124698,0.66124698,0.59126878],"xyz":[5.3786938756,0.0,3.7548909372],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51840336,0.51840336,0.23739812],"xyz":[4.9433685348,0.0,1.6624529723],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48159664,0.48159664,0.76260188],"xyz":[2.8507804652,0.0,4.6156520277],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.1570763,0.1570763,0.59729982],"xyz":[-0.1901396318,0.0,3.4803885386],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.8429237,0.8429237,0.40270018],"xyz":[7.9842886318,0.0,2.7977164614],"label":"N","properties":{}}]},"10":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[7.932667,-1.614529,0.519404],[7.932667,1.614529,0.519404],[-3.354285,0.0,6.743572]],"pbc":[true,true,true],"a":8.1119473704,"b":8.1119473704,"c":7.5317322828,"alpha":112.2211128748,"beta":112.2211128748,"gamma":22.9606005961,"volume":178.3626375547},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.72571673,0.72571673,0.20605258],"xyz":[10.8225792325,0.0,2.1434107539],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.27428327,0.27428327,0.79394742],"xyz":[1.6884697675,0.0,5.6389692461],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.88941755,0.88941755,0.6236523],"xyz":[12.0189989411,0.0,5.1295782543],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.11058245,0.11058245,0.3763477],"xyz":[0.4920500589,0.0,2.6528017457],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.59020144,0.59020144,0.70963199],"xyz":[6.9834350333,0.0,5.3985603956],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.40979856,0.40979856,0.29036801],"xyz":[5.5276139667,0.0,2.3838196044],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.85546464,0.85546464,0.3492377],"xyz":[12.4007894602,0.0,3.2437730868],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.14453536,0.14453536,0.6507623],"xyz":[0.1102595398,0.0,4.5386069132],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51240013,0.51240013,0.21277716],"xyz":[7.415683968,0.0,1.9671634527],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48759987,0.48759987,0.78722284],"xyz":[5.095365032,0.0,5.8152165473],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.8471077,0.8471077,0.84881876],"xyz":[10.5924665601,0.0,6.6040526786],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.1528923,0.1528923,0.15118124],"xyz":[1.9185824399,0.0,1.1783273214],"label":"N","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zr","properties":{}}]},"70":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.890752,-2.823677,0.0],[0.0,5.647354,0.0],[0.0,0.0,6.428382]],"pbc":[true,true,true],"a":5.6473539756,"b":5.647354,"c":6.428382,"alpha":90.0,"beta":90.0,"gamma":120.0000001429,"volume":177.5506757563},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.33333333,0.66666667,0.62486757],"xyz":[1.6302506504,2.8236770282,4.0168874394],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.66666667,0.33333333,0.12486757],"xyz":[3.2605013496,-0.0000000282,0.8026964394],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.04179757],"xyz":[0.0,0.0,0.2686907466],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.54179757],"xyz":[0.0,0.0,3.4828817466],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.33333333,0.66666667,0.02173231],"xyz":[1.6302506504,2.8236770282,0.1397035904],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66666667,0.33333333,0.52173231],"xyz":[3.2605013496,-0.0000000282,3.3538945904],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33333333,0.66666667,0.30226121],"xyz":[1.6302506504,2.8236770282,1.9430505217],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66666667,0.33333333,0.80226121],"xyz":[3.2605013496,-0.0000000282,5.1572415217],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.16316165,0.32632331,0.82311378],"xyz":[0.7979831661,1.3821474516,5.2912898073],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.83683835,0.67367669,0.32311378],"xyz":[4.0927688339,1.4415295484,2.0770988073],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.32632331,0.16316165,0.32311378],"xyz":[1.595966381,-0.0000000282,2.0770988073],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.83683835,0.16316165,0.32311378],"xyz":[4.0927688339,-1.4415296048,2.0770988073],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.16316165,0.83683835,0.82311378],"xyz":[0.7979831661,4.2652066048,5.2912898073],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.67367669,0.83683835,0.82311378],"xyz":[3.294785619,2.8236770282,5.2912898073],"label":"N","properties":{}}]},"2":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.813812,-2.779256,0.0],[0.0,5.558512,0.0],[0.0,0.0,3.745624]],"pbc":[true,true,true],"a":5.558511481,"b":5.558512,"c":3.745624,"alpha":90.0,"beta":90.0,"gamma":120.0000030884,"volume":100.2240277324},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.33333333,0.66666667,0.5],"xyz":[1.604603984,2.7792560278,1.872812],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66666667,0.33333333,0.5],"xyz":[3.209208016,-0.0000000278,1.872812],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41946521,0.0,0.12157999],"xyz":[2.0192266615,-1.1658012017,0.4553929285],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58053479,1.0,0.87842001],"xyz":[2.7945853385,3.9450572017,3.2902310715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.41946521,0.12157999],"xyz":[0.0,2.3316024034,0.4553929285],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58053479,0.58053479,0.12157999],"xyz":[2.7945853385,1.6134547983,0.4553929285],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41946521,0.41946521,0.87842001],"xyz":[2.0192266615,1.1658012017,3.2902310715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.58053479,0.87842001],"xyz":[0.0,3.2269095966,3.2902310715],"label":"N","properties":{}}]},"35":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.103714,0.0,-0.700673],[0.0,12.972733,0.0],[-0.424296,0.0,6.461036]],"pbc":[true,true,true],"a":4.1631011574,"b":12.972733,"c":6.4749527635,"alpha":90.0,"beta":103.4465312358,"gamma":90.0,"volume":340.1055071678},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.0328983,0.25,0.13910651],"xyz":[0.0759828785,3.24318325,0.8757212184],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.9671017,0.75,0.86089349],"xyz":[3.6034351215,9.72954975,4.8846417816],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.40925565,0.04150102,0.79236623],"xyz":[1.3432703186,0.5383816517,4.8327523532],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.59074435,0.95849898,0.20763377],"xyz":[2.3361476814,12.4343513483,0.9276106468],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.59074435,0.54150102,0.20763377],"xyz":[2.3361476814,7.0247481517,0.9276106468],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.40925565,0.45849898,0.79236623],"xyz":[1.3432703186,5.9479848483,4.8327523532],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87785521,0.97059168,0.98812405],"xyz":[3.1832096333,12.5912267167,5.769215616],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12214479,0.02940832,0.01187595],"xyz":[0.4962083667,0.3815062833,-0.008852616],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12214479,0.47059168,0.01187595],"xyz":[0.4962083667,6.1048602167,-0.008852616],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87785521,0.52940832,0.98812405],"xyz":[3.1832096333,6.8678727833,5.769215616],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.79856089,0.41140412,0.3761211],"xyz":[3.1174788259,5.3370358039,1.870601913],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.20143911,0.58859588,0.6238789],"xyz":[0.5619391741,7.6356971961,3.889761087],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.20143911,0.91140412,0.6238789],"xyz":[0.5619391741,11.8234023039,3.889761087],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.79856089,0.08859588,0.3761211],"xyz":[3.1174788259,1.1493306961,1.870601913],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28692864,0.84017359,0.21926568],"xyz":[1.084439526,10.8993476567,1.2156403011],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71307136,0.15982641,0.78073432],"xyz":[2.594978474,2.0733853433,4.5447226989],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.71307136,0.34017359,0.78073432],"xyz":[2.594978474,4.4129811567,4.5447226989],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.28692864,0.65982641,0.21926568],"xyz":[1.084439526,8.5597518433,1.2156403011],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92927501,0.88310609,0.58519048],"xyz":[3.5651848885,11.4562995162,3.1298188491],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07072499,0.11689391,0.41480952],"xyz":[0.1142331115,1.5164334838,2.6305441509],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07072499,0.38310609,0.41480952],"xyz":[0.1142331115,4.9699330162,2.6305441509],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92927501,0.61689391,0.58519048],"xyz":[3.5651848885,8.0027999838,3.1298188491],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.49121727,0.25,0.1538523],"xyz":[1.9505362725,3.24318325,0.6498625708],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.50878273,0.75,0.8461477],"xyz":[1.7288817275,9.72954975,5.1105004292],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.35117108,0.75,0.24759333],"xyz":[1.3360528178,9.72954975,1.3536533244],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.64882892,0.25,0.75240667],"xyz":[2.3433651822,3.24318325,4.4067096756],"label":"N","properties":{}}]},"9":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.56123,0.0,0.098238],[0.0,6.060726,0.0],[-2.983057,0.0,5.510293]],"pbc":[true,true,true],"a":6.5619653929,"b":6.060726,"c":6.2659363236,"alpha":90.0,"beta":117.5715836392,"gamma":90.0,"volume":220.897397497},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.16989291,0.87830687,0.43646054],"xyz":[-0.1872802112,5.323177283,2.421715398],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.83010709,0.12169313,0.56353946],"xyz":[3.7654532112,0.737548717,3.186815602],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.83010709,0.37830687,0.06353946],"xyz":[5.2569817112,2.292814283,0.431669102],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.16989291,0.62169313,0.93646054],"xyz":[-1.6788087112,3.767911717,5.176861898],"label":"Zn","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.32449651,0.11021715,0.07651784],"xyz":[1.9008391581,0.6679959467,0.4535136063],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.67550349,0.88978285,0.92348216],"xyz":[1.6773338419,5.3927300533,5.1550173937],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.67550349,0.61021715,0.42348216],"xyz":[3.1688623419,3.6983589467,2.3998708937],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.32449651,0.38978285,0.57651784],"xyz":[0.4093106581,2.3623670533,3.2086601063],"label":"Zr","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37508238,0.40328558,0.26426987],"xyz":[1.6726696785,2.4442034001,1.4930517576],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62491762,0.59671442,0.73573013],"xyz":[1.9055033215,3.6165225999,4.1154792424],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62491762,0.90328558,0.23573013],"xyz":[3.3970318215,5.4745664001,1.3603327424],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37508238,0.09671442,0.76426987],"xyz":[0.1811411785,0.5861595999,4.2481982576],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[-1.4915285,3.030363,2.7551465],"label":"N","properties":{}}]},"52":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.850647,-4.711321,-0.214326],[4.850647,4.711321,-0.214326],[-0.377966,0.0,5.614459]],"pbc":[true,true,true],"a":6.7654458477,"b":6.7654458477,"c":5.6271669746,"alpha":94.5750991688,"beta":94.5750991688,"gamma":88.2745710295,"volume":255.8506497649},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.93947997,0.24500985,0.59229075],"xyz":[5.5216762263,-3.2718716602,3.0715251668],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75499015,0.06052003,0.90770925],"xyz":[3.6126687737,-3.2718716602,4.9215113332],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.06052003,0.75499015,0.40770925],"xyz":[3.8016517737,3.2718716602,2.1142818332],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.24500985,0.93947997,0.09229075],"xyz":[5.7106592263,3.2718716602,0.2642956668],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.65515963,0.34484037,0.25],"xyz":[4.7561555,-1.4620136463,1.18928875],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.34484037,0.65515963,0.75],"xyz":[4.5671725,1.4620136463,3.99651825],"label":"Zn","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.18630163,0.38379918,0.12077952],"xyz":[2.7197072317,0.9304743548,0.5559242369],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.61620082,0.81369837,0.37922048],"xyz":[6.7926037683,0.9304743548,1.8226532631],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.81369837,0.61620082,0.87922048],"xyz":[6.6036207683,-0.9304743548,4.6298827631],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.38379918,0.18630163,0.62077952],"xyz":[2.5307242317,-0.9304743548,3.3631537369],"label":"Zr","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.88219627,0.3291432,0.00176296],"xyz":[5.8751138272,-2.6056105428,-0.2497234766],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6708568,0.11780373,0.49823704],"xyz":[3.6371971728,-2.6056105428,2.6283009766],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.11780373,0.6708568,0.99823704],"xyz":[3.4482141728,2.6056105428,5.4355304766],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3291432,0.88219627,0.50176296],"xyz":[5.6861308272,2.6056105428,2.5575060234],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24930985,0.44271839,0.48301702],"xyz":[3.1742206953,0.9112097161,2.5635596105],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55728161,0.75069015,0.01698298],"xyz":[6.3380903047,0.9112097161,-0.1849821105],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75069015,0.55728161,0.51698298],"xyz":[6.1491073047,-0.9112097161,2.6222473895],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44271839,0.24930985,0.98301702],"xyz":[2.9852376953,-0.9112097161,5.3707891105],"label":"N","properties":{}}]},"14":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.131598,-3.23494,0.226503],[6.131598,3.23494,0.226503],[0.246773,0.0,5.643709]],"pbc":[true,true,true],"a":6.9363271582,"b":6.9363271582,"c":5.6491015383,"alpha":85.9148460546,"beta":85.9148460546,"gamma":55.5986867097,"volume":223.5282722621},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.00267917,0.27212232,0.25091105],"xyz":[1.746890339,0.8716324237,1.478312313],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.27212232,0.00267917,0.75091105],"xyz":[1.870276839,-0.8716324237,4.300166813],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.53639722,0.15487041,0.20074018],"xyz":[4.288112474,-1.2342163387,1.2894933525],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.15487041,0.53639722,0.70074018],"xyz":[4.411498974,1.2342163387,4.1113478525],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.41162369,0.66084098,0.29113314],"xyz":[6.647766024,0.8062029801,1.8859871876],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66084098,0.41162369,0.79113314],"xyz":[6.771152524,-0.8062029801,4.7078416876],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3019467,0.26792173,0.9444768],"xyz":[3.727275499,-0.1100687365,5.4594291255],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.26792173,0.3019467,0.4444768],"xyz":[3.603888999,0.1100687365,2.6375746255],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.84479035,0.67122354,0.09235619],"xyz":[9.31837875,-0.5614782163,0.8646131548],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.67122354,0.84479035,0.59235619],"xyz":[9.44176525,0.5614782163,3.6864676548],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.890775,0.81130119,0.05351553],"xyz":[10.4496531503,-0.2570930069,0.6875514416],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.81130119,0.890775,0.55351553],"xyz":[10.5730396503,0.2570930069,3.5094059416],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.22233666,0.95259651,0.11785524],"xyz":[7.2333013664,2.3623467992,0.9312665665],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.95259651,0.22233666,0.61785524],"xyz":[7.3566878664,-2.3623467992,3.7531210665],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.36334386,0.66043067,0.64751187],"xyz":[6.4371623073,0.9610580051,3.8862565707],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66043067,0.36334386,0.14751187],"xyz":[6.3137758073,-0.9610580051,1.0644020707],"label":"N","properties":{}}]},"11":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[8.161179,0.0,0.449837],[0.0,3.324704,0.0],[-2.371431,0.0,9.27092]],"pbc":[true,true,true],"a":8.1735669078,"b":3.324704,"c":9.5694118228,"alpha":90.0,"beta":101.1932731649,"gamma":90.0,"volume":255.0992018413},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.94849747,0.25,0.32956364],"xyz":[6.9593202013,0.831176,3.4820273978],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.05150253,0.75,0.67043636],"xyz":[-1.1695722013,2.493528,6.2387296022],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.1810685,0.25,0.03690071],"xyz":[1.3902249521,0.831176,0.4235548412],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.8189315,0.75,0.96309929],"xyz":[4.3995230479,2.493528,9.2972021588],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.67614681,0.25,0.61333077],"xyz":[4.0636835455,0.831176,5.9902963548],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.32385319,0.75,0.38666923],"xyz":[1.7260644545,2.493528,3.7304606452],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.53082596,0.25,0.1265889],"xyz":[4.0319688357,0.831176,1.4123807222],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.46917404,0.75,0.8734111],"xyz":[1.7577791643,2.493528,8.3083762778],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.92053932,0.25,0.58165729],"xyz":[6.1333260382,0.831176,5.8065908491],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.07946068,0.75,0.41834271],"xyz":[-0.3435780382,2.493528,3.9141661509],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.30285053,0.25,0.68482012],"xyz":[0.8476137236,0.831176,6.4851459208],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.69714947,0.75,0.31517988],"xyz":[4.9421342764,2.493528,3.2356110792],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.9485379,0.25,0.11106725],"xyz":[7.4777992704,0.831176,1.4563830327],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0514621,0.75,0.88893275],"xyz":[-1.6880512704,2.493528,8.2643739673],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.6355139,0.25,0.9534327],"xyz":[2.9255428337,0.831176,9.1250759533],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.3644861,0.75,0.0465673],"xyz":[2.8642051663,2.493528,0.5956810467],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37209085,0.25,0.5785174],"xyz":[1.6647859347,0.831176,5.5307687657],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62790915,0.75,0.4214826],"xyz":[4.1249620653,2.493528,4.1899882343],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.29515767,0.25,0.2647115],"xyz":[1.7810895209,0.831176,2.5868919804],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.70484233,0.75,0.7352885],"xyz":[4.0086584791,2.493528,7.1338650196],"label":"N","properties":{}}]},"27":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.24056,0.0,0.0],[0.0,12.886769,0.0],[0.0,0.0,7.790818]],"pbc":[true,true,true],"a":3.24056,"b":12.886769,"c":7.790818,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":325.3472720583},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.75,0.55699214],"xyz":[0.81014,9.66507675,4.3394243902],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.25,0.44300786],"xyz":[2.43042,3.22169225,3.4513936098],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.75,0.16926273],"xyz":[0.81014,9.66507675,1.3186951236],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.25,0.83073727],"xyz":[2.43042,3.22169225,6.4721228764],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.44772047,0.15767431],"xyz":[0.81014,5.7696702735,1.2284118525],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.94772047,0.84232569],"xyz":[2.43042,12.2130547735,6.5624061475],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.55227953,0.84232569],"xyz":[2.43042,7.1170987265,6.5624061475],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.05227953,0.15767431],"xyz":[0.81014,0.6737142265,1.2284118525],"label":"Zr","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.60748537,0.68873064],"xyz":[0.81014,7.8285236341,5.3657750673],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.10748537,0.31126936],"xyz":[2.43042,1.3851391341,2.4250429327],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.39251463,0.31126936],"xyz":[2.43042,5.0582453659,2.4250429327],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.89251463,0.68873064],"xyz":[0.81014,11.5016298659,5.3657750673],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.59581971,0.05569449],"xyz":[0.81014,7.6781909684,0.4339056352],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.09581971,0.94430551],"xyz":[2.43042,1.2348064684,7.3569123648],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.40418029,0.94430551],"xyz":[2.43042,5.2085780316,7.3569123648],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.90418029,0.05569449],"xyz":[0.81014,11.6519625316,0.4339056352],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.25,0.64078793],"xyz":[0.81014,3.22169225,4.9922621392],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.75,0.35921207],"xyz":[2.43042,9.66507675,2.7985558608],"label":"N","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.25,0.25,0.13097308],"xyz":[0.81014,3.22169225,1.0203874292],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.75,0.75,0.86902692],"xyz":[2.43042,9.66507675,6.7704305708],"label":"Zn","properties":{}}]},"7":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[-4.856584,4.856584,4.856584],[4.856584,-4.856584,4.856584],[4.856584,4.856584,-4.856584]],"pbc":[true,true,true],"a":8.4118502392,"b":8.4118502392,"c":8.4118502392,"alpha":109.4712206345,"beta":109.4712206345,"gamma":109.4712206345,"volume":458.1974897367},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.4258544,0.4258544,0.4258544],"xyz":[2.0681976654,2.0681976654,2.0681976654],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.5741456],"xyz":[2.7883863346,2.7883863346,-2.7883863346],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5741456,0.0],"xyz":[2.7883863346,-2.7883863346,2.7883863346],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5741456,0.0,0.0],"xyz":[-2.7883863346,2.7883863346,2.7883863346],"label":"Zn","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.5,0.25,0.75],"xyz":[2.428292,4.856584,0.0],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.5,0.75,0.25],"xyz":[2.428292,0.0,4.856584],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.5,0.25],"xyz":[0.0,2.428292,4.856584],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.25,0.5],"xyz":[0.0,4.856584,2.428292],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.75,0.5],"xyz":[4.856584,0.0,2.428292],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.5,0.75],"xyz":[4.856584,2.428292,0.0],"label":"Zr","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51838322,0.51838322,0.27053201],"xyz":[1.3138614313,1.3138614313,3.721281873],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24785121,0.24785121,0.72946799],"xyz":[3.5427225687,3.5427225687,-1.135302127],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24785121,0.72946799,0.24785121],"xyz":[3.5427225687,-1.135302127,3.5427225687],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.48161678,0.75214879],"xyz":[5.991886127,1.3138614313,-1.3138614313],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.27053201,0.51838322,0.51838322],"xyz":[3.721281873,1.3138614313,1.3138614313],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.51838322,0.27053201,0.51838322],"xyz":[1.3138614313,3.721281873,1.3138614313],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.75214879,0.48161678],"xyz":[5.991886127,-1.3138614313,1.3138614313],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75214879,0.48161678,0.0],"xyz":[-1.3138614313,1.3138614313,5.991886127],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48161678,0.75214879,0.0],"xyz":[1.3138614313,-1.3138614313,5.991886127],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.48161678,0.0,0.75214879],"xyz":[1.3138614313,5.991886127,-1.3138614313],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75214879,0.0,0.48161678],"xyz":[-1.3138614313,5.991886127,1.3138614313],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.72946799,0.24785121,0.24785121],"xyz":[-1.135302127,3.5427225687,3.5427225687],"label":"N","properties":{}}]},"37":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[1.537037,-8.306579,0.0],[1.537037,8.306579,0.0],[0.0,0.0,5.818854]],"pbc":[true,true,true],"a":8.4475876688,"b":8.4475876688,"c":5.818854,"alpha":90.0,"beta":90.0,"gamma":159.0332968725,"volume":148.584661107},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.01974571,0.98025429,0.25],"xyz":[1.537037,7.9785403999,1.4547135],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.98025429,0.01974571,0.75],"xyz":[1.537037,-7.9785403999,4.3641405],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.16944846,0.83055154,0.25],"xyz":[1.537037,5.4915049612,1.4547135],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.83055154,0.16944846,0.75],"xyz":[1.537037,-5.4915049612,4.3641405],"label":"Zn","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.33953783,0.66046217,0.25],"xyz":[1.537037,2.6657833832,1.4547135],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.66046217,0.33953783,0.75],"xyz":[1.537037,-2.6657833832,4.3641405],"label":"Zr","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41969297,0.58030703,0.97742156],"xyz":[1.537037,1.3341533779,5.6874733541],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58030703,0.41969297,0.47742156],"xyz":[1.537037,-1.3341533779,2.7780463541],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.58030703,0.41969297,0.02257844],"xyz":[1.537037,-1.3341533779,0.1313806459],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.41969297,0.58030703,0.52257844],"xyz":[1.537037,1.3341533779,3.0408076459],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75587878,0.24412122,0.25],"xyz":[1.537037,-4.250954601,1.4547135],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.24412122,0.75587878,0.75],"xyz":[1.537037,4.250954601,4.3641405],"label":"N","properties":{}}]},"40":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.720953,0.0,0.0],[0.0,11.967072,0.0],[2.860476,5.983536,3.126332]],"pbc":[true,true,true],"a":5.720953,"b":11.967072,"c":7.3320514035,"alpha":35.3057707463,"beta":67.0372179956,"gamma":90.0,"volume":214.0382442275},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.75,0.5],"xyz":[2.86047625,11.967072,1.563166],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.25,0.5],"xyz":[5.72095275,5.983536,1.563166],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[2.8604765,5.983536,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.5],"xyz":[1.430238,2.991768,1.563166],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[4.2907145,2.991768,1.563166],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[1.430238,8.975304,1.563166],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[4.2907145,8.975304,1.563166],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.29083893,0.06226772,0.0],"xyz":[1.6638758491,0.7451622885,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.20916107,0.56226772,0.0],"xyz":[1.1966006509,6.7286982885,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.79083893,0.43773228,0.0],"xyz":[4.5243523491,5.2383737115,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.70916107,0.93773228,0.0],"xyz":[4.0570771509,11.2219097115,0.0],"label":"N","properties":{}}]},"62":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[2.999577,0.0,0.0],[0.0,5.448017,0.0],[0.0,0.0,2.860144]],"pbc":[true,true,true],"a":2.999577,"b":5.448017,"c":2.860144,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":46.7397481695},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[1.4997885,2.7240085,0.0],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.28297953,0.5],"xyz":[0.0,1.5416772901,1.430072],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.71702047,0.5],"xyz":[0.0,3.9063397099,1.430072],"label":"N","properties":{}}]},"33":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[5.543294,-3.200422,0.0],[0.0,6.400844,0.0],[0.0,0.0,10.157681]],"pbc":[true,true,true],"a":6.4008444246,"b":6.400844,"c":10.157681,"alpha":90.0,"beta":90.0,"gamma":119.9999978054,"volume":360.412400822},"sites":[{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.26067791],"xyz":[0.0,0.0,2.6478830535],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.0,0.76067791],"xyz":[0.0,0.0,7.7267235535],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.33333333,0.66666667,0.22343397],"xyz":[1.8477646482,3.200422032,2.2695709918],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.33333333,0.66666667,0.72343397],"xyz":[1.8477646482,3.200422032,7.3484114918],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66666667,0.33333333,0.72343397],"xyz":[3.6955293518,-0.000000032,7.3484114918],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.66666667,0.33333333,0.22343397],"xyz":[3.6955293518,-0.000000032,2.2695709918],"label":"Zn","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.34838803,1.0,0.98014843],"xyz":[1.9312172764,5.2858552843,9.9560350846],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.65161197,0.0,0.48014843],"xyz":[3.6120767236,-2.0854332843,4.8771945846],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[1.0,0.34838803,0.98014843],"xyz":[5.543294,-0.9704445685,9.9560350846],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.34838803,0.34838803,0.48014843],"xyz":[1.9312172764,1.1149887157,4.8771945846],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.65161197,0.65161197,0.98014843],"xyz":[3.6120767236,2.0854332843,9.9560350846],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.0,0.65161197,0.48014843],"xyz":[0.0,4.1708665685,4.8771945846],"label":"Zr","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.29706565,1.0,0.20897943],"xyz":[1.6467222353,5.4501085583,2.1227463855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.70293435,0.0,0.70897943],"xyz":[3.8965717647,-2.2496865583,7.2015868855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.29706565,0.20897943],"xyz":[0.0,1.9014708834,2.1227463855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.29706565,0.29706565,0.70897943],"xyz":[1.6467222353,0.9507354417,7.2015868855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.70293435,0.70293435,0.20897943],"xyz":[3.8965717647,2.2496865583,2.1227463855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.70293435,0.70897943],"xyz":[0.0,4.4993731166,7.2015868855],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44196668,0.0,0.31072121],"xyz":[2.4499512454,-1.4144798859,3.1562069311],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55803332,1.0,0.81072121],"xyz":[3.0933427546,4.6149018859,8.2350474311],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.44196668,0.31072121],"xyz":[0.0,2.8289597719,3.1562069311],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.44196668,0.44196668,0.81072121],"xyz":[2.4499512454,1.4144798859,8.2350474311],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.55803332,0.55803332,0.31072121],"xyz":[3.0933427546,1.7859421141,3.1562069311],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.55803332,0.81072121],"xyz":[0.0,3.5718842281,8.2350474311],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.46416939],"xyz":[0.0,0.0,4.7148845936],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.0,0.96416939],"xyz":[0.0,0.0,9.7937250936],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33333333,0.66666667,0.02996876],"xyz":[1.8477646482,3.200422032,0.304413104],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.33333333,0.66666667,0.52996876],"xyz":[1.8477646482,3.200422032,5.383253604],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66666667,0.33333333,0.52996876],"xyz":[3.6955293518,-0.000000032,5.383253604],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.66666667,0.33333333,0.02996876],"xyz":[3.6955293518,-0.000000032,0.304413104],"label":"N","properties":{}}]},"17":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[4.971455,0.0,-0.378972],[0.0,5.742631,0.0],[2.166218,2.871315,3.580151]],"pbc":[true,true,true],"a":4.9858785178,"b":5.742631,"c":5.0748824061,"alpha":55.5428688774,"beta":68.1613349204,"gamma":90.0,"volume":106.9248923934},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.25,0.25874194,0.0],"xyz":[1.24286375,1.4858594856,-0.094743],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.75,0.74125806,1.0],"xyz":[5.89480925,7.1280865144,3.295922],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[3.5688365,1.4356575,1.6005895],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[1.083109,4.306973,1.7900755],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.63406163,1.0],"xyz":[3.40908175,6.5124969723,3.485408],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.36593837,0.0],"xyz":[3.72859125,2.1014490277,-0.284229],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.87451404,0.86599373,0.39235106],"xyz":[5.1975251252,6.0996459235,1.073259705],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.12548596,0.13400627,0.60764894],"xyz":[1.9401478748,2.5143000765,2.127919295],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.62548596,0.25834479,0.60764894],"xyz":[4.4258753748,3.2283303159,1.938433295],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.37451404,0.74165521,0.39235106],"xyz":[2.7117976252,5.3856156841,1.262745705],"label":"N","properties":{}}]},"63":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[3.779652,0.0,0.0],[0.0,3.779652,0.0],[0.0,0.0,3.779652]],"pbc":[true,true,true],"a":3.779652,"b":3.779652,"c":3.779652,"alpha":90.0,"beta":90.0,"gamma":90.0,"volume":53.9952362837},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.5,0.5],"xyz":[1.889826,1.889826,1.889826],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.0,0.5,0.5],"xyz":[0.0,1.889826,1.889826],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.0,0.5],"xyz":[1.889826,0.0,1.889826],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[1.889826,1.889826,0.0],"label":"N","properties":{}}]},"26":{"@module":"pymatgen.core.structure","@class":"Structure","charge":0,"lattice":{"matrix":[[6.038698,0.0,0.0],[0.0,6.038698,0.0],[3.019349,3.019349,4.167943]],"pbc":[true,true,true],"a":6.038698,"b":6.038698,"c":5.9669661989,"alpha":59.6015292517,"beta":59.6015292517,"gamma":90.0,"volume":151.9876823399},"sites":[{"species":[{"element":"Zr","occu":1}],"abc":[0.0,0.0,0.0],"xyz":[0.0,0.0,0.0],"label":"Zr","properties":{}},{"species":[{"element":"Zr","occu":1}],"abc":[0.5,0.5,0.0],"xyz":[3.019349,3.019349,0.0],"label":"Zr","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.0,0.5,0.0],"xyz":[0.0,3.019349,0.0],"label":"Zn","properties":{}},{"species":[{"element":"Zn","occu":1}],"abc":[0.5,0.0,0.0],"xyz":[3.019349,0.0,0.0],"label":"Zn","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2398157,0.7398157,1.0],"xyz":[4.467523588,7.486872588,4.167943],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7601843,0.2601843,0.0],"xyz":[4.590523412,1.571174412,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.7398157,0.7601843,0.0],"xyz":[4.467523588,4.590523412,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.2601843,0.2398157,0.0],"xyz":[1.571174412,1.448174588,0.0],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.75,0.25,0.5],"xyz":[6.038698,3.019349,2.0839715],"label":"N","properties":{}},{"species":[{"element":"N","occu":1}],"abc":[0.25,0.75,0.5],"xyz":[3.019349,6.038698,2.0839715],"label":"N","properties":{}}]}}} diff --git a/examples/inputs/poscar_to_df.py b/examples/inputs/poscar_to_df.py index 012d700d..52295b86 100644 --- a/examples/inputs/poscar_to_df.py +++ b/examples/inputs/poscar_to_df.py @@ -1,6 +1,4 @@ # %% -from __future__ import annotations - import glob import os @@ -64,14 +62,16 @@ print(f"Number of points in dataset: {len(df)}") # takes ~ 15mins -df["wyckoff"] = df.final_structure.progress_map(get_protostructure_label_from_spglib) +df["protostructure"] = df.final_structure.progress_map( + get_protostructure_label_from_spglib +) # lattice, sites = zip(*df.final_structure.progress_map(get_cgcnn_input)) df["composition"] = df.final_structure.map(lambda x: x.composition.reduced_formula) df["nelements"] = df.final_structure.map(lambda x: len(x.composition.elements)) df["volume"] = df.final_structure.map(lambda x: x.volume) -df["nsites"] = df.final_structure.map(lambda x: x.num_sites) +df["n_sites"] = df.final_structure.map(lambda x: x.num_sites) # df["lattice"] = lattice # df["sites"] = sites @@ -83,7 +83,7 @@ df_el = df_el.sort_values(by=["composition", "E_vasp_per_atom"], ascending=True) el_refs = { c.composition.elements[0]: e - for c, e in zip(df_el.final_structure, df_el.E_vasp_per_atom) + for c, e in zip(df_el.final_structure, df_el.E_vasp_per_atom, strict=False) } @@ -113,7 +113,7 @@ def get_formation_energy(comp: str, energy: float, el_refs: dict[str, float]) -> # %% # Remove invalid Wyckoff Sequences -df["nwyckoff"] = df["wyckoff"].map(count_wyckoff_positions) +df["n_wyckoff"] = df["protostructure"].map(count_wyckoff_positions) df = df.query("'Invalid' not in wyckoff") print(f"Valid Wyckoff representation {len(df)}") @@ -121,8 +121,8 @@ def get_formation_energy(comp: str, energy: float, el_refs: dict[str, float]) -> # %% # Drop duplicated wyckoff representations -df = df.sort_values(by=["wyckoff", "E_vasp_per_atom"], ascending=True) -df_wyk = df.drop_duplicates(["wyckoff"], keep="first") +df = df.sort_values(by=["protostructure", "E_vasp_per_atom"], ascending=True) +df_wyk = df.drop_duplicates(["protostructure"], keep="first") print(f"Lowest energy unique wyckoff sequences: {len(df_wyk)}") @@ -141,25 +141,25 @@ def get_formation_energy(comp: str, energy: float, el_refs: dict[str, float]) -> print(f"Total systems: {len(df_wyk)}") wyk_lim = 16 -df_wyk = df_wyk[df_wyk["nwyckoff"] <= wyk_lim] +df_wyk = df_wyk[df_wyk["n_wyckoff"] <= wyk_lim] print(f"Less than {wyk_lim} Wyckoff species in cell: {len(df_wyk)}") cell_lim = 64 -df_wyk = df_wyk[df_wyk["nsites"] <= cell_lim] +df_wyk = df_wyk[df_wyk["n_sites"] <= cell_lim] print(f"Less than {cell_lim} atoms in cell: {len(df_wyk)}") vol_lim = 500 -df_wyk = df_wyk[df_wyk["volume"] / df_wyk["nsites"] < vol_lim] +df_wyk = df_wyk[df_wyk["volume"] / df_wyk["n_sites"] < vol_lim] print(f"Less than {vol_lim} A^3 per site: {len(df_wyk)}") -fields = ["material_id", "composition", "E_f", "wyckoff"] # , "lattice", "sites"] +fields = ["material_id", "composition", "E_f", "protostructure"] # , "lattice", "sites"] -df_wyk[["material_id", "composition", "E_f", "wyckoff"]].to_csv( +df_wyk[["material_id", "composition", "E_f", "protostructure"]].to_csv( final_dir + "/examples.csv", index=False ) df_wyk["structure"] = df_wyk["final_structure"].map(lambda x: x.as_dict()) -df_wyk[["material_id", "composition", "E_f", "wyckoff", "structure"]].to_json( +df_wyk[["material_id", "composition", "E_f", "protostructure", "structure"]].to_json( final_dir + "/examples.json" ) diff --git a/examples/wrenformer/matbench/make_plots.py b/examples/matbench_example/make_plots.py similarity index 94% rename from examples/wrenformer/matbench/make_plots.py rename to examples/matbench_example/make_plots.py index dac82e3a..2ea4d274 100644 --- a/examples/wrenformer/matbench/make_plots.py +++ b/examples/matbench_example/make_plots.py @@ -1,5 +1,9 @@ # %% -from __future__ import annotations +import sys +from pathlib import Path + +# Add the parent directory to system path +sys.path.append(str(Path(__file__).parent.parent)) import json import logging @@ -11,22 +15,18 @@ import pandas as pd import plotly.express as px import pymatviz as pmv -from sklearn.metrics import r2_score, roc_auc_score - -from examples.wrenformer.matbench import DATA_PATHS -from examples.wrenformer.matbench.plotting_functions import ( +from matbench import MatbenchBenchmark +from matbench.constants import CLF_KEY, REG_KEY +from matbench.metadata import mbv01_metadata as matbench_metadata +from matbench_example.plotting_functions import ( dataset_labels_html, error_heatmap, plot_leaderboard, scale_errors, ) -from examples.wrenformer.matbench.utils import recursive_dict_merge -from matbench import MatbenchBenchmark -from matbench.constants import CLF_KEY, REG_KEY -from matbench.metadata import mbv01_metadata as matbench_metadata - -__author__ = "Janosh Riebesell" -__date__ = "2022-04-25" +from matbench_example.prepare_matbench_datasets import DATA_PATHS +from matbench_example.utils import recursive_dict_merge +from sklearn.metrics import r2_score, roc_auc_score logging.getLogger("matbench").setLevel("ERROR") @@ -187,7 +187,7 @@ target = df.columns[0] -y_cols = [c for c in df if c not in [target, "composition", "wyckoff"]] +y_cols = [c for c in df if c not in [target, "composition", "protostructure"]] labels = {} for y_col in y_cols: diff --git a/examples/wrenformer/matbench/plotting_functions.py b/examples/matbench_example/plotting_functions.py similarity index 95% rename from examples/wrenformer/matbench/plotting_functions.py rename to examples/matbench_example/plotting_functions.py index 33a1eb05..856e0cb9 100644 --- a/examples/wrenformer/matbench/plotting_functions.py +++ b/examples/matbench_example/plotting_functions.py @@ -1,22 +1,13 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING, Any +from typing import Any import numpy as np +import pandas as pd import plotly.express as px import plotly.io as pio -from sklearn.metrics import accuracy_score, auc, roc_curve - from matbench.constants import CLF_KEY, REG_KEY from matbench.metadata import mbv01_metadata -from matbench.metadata import mbv01_metadata as matbench_metadata - -if TYPE_CHECKING: - import pandas as pd - from plotly.graph_objs._figure import Figure - -__author__ = "Janosh Riebesell" -__date__ = "2022-04-25" +from plotly.graph_objs._figure import Figure +from sklearn.metrics import accuracy_score, auc, roc_curve pio.templates.default = "plotly_white" @@ -76,7 +67,7 @@ def scale_clf_task(series: pd.Series) -> pd.Series: "matbench_mp_is_metal": "Metallicity DFT", "matbench_mp_e_form": "Eá¶  DFT", } -dataset_sizes = {k: v["n_samples"] for k, v in matbench_metadata.items()} +dataset_sizes = {k: v["n_samples"] for k, v in mbv01_metadata.items()} dataset_labels_html = { k: f"{v} {dataset_sizes[k]:,}" for k, v in dataset_labels.items() } diff --git a/examples/matbench_example/prepare_matbench_datasets.py b/examples/matbench_example/prepare_matbench_datasets.py new file mode 100644 index 00000000..2ca4f588 --- /dev/null +++ b/examples/matbench_example/prepare_matbench_datasets.py @@ -0,0 +1,67 @@ +import os +from glob import glob +from typing import Literal + +from matbench.data_ops import load +from pymatgen.analysis.prototypes import get_protostructure_label_from_spglib +from tqdm import tqdm + +tqdm.pandas() + +current_dir = os.path.dirname(os.path.abspath(__file__)) + +SMOKE_TEST = True + +matbench_datasets = [ + "matbench_steels", + "matbench_jdft2d", + "matbench_phonons", + "matbench_expt_gap", + "matbench_dielectric", + "matbench_expt_is_metal", + "matbench_glass", + "matbench_log_gvrh", + "matbench_log_kvrh", + "matbench_perovskites", + "matbench_mp_gap", + "matbench_mp_is_metal", + "matbench_mp_e_form", +] + +if SMOKE_TEST: + matbench_datasets = matbench_datasets[2:3] + +MatbenchDatasets = Literal[*matbench_datasets] + +os.makedirs(f"{current_dir}/datasets", exist_ok=True) +for dataset in matbench_datasets: + dataset_path = f"{current_dir}/datasets/{dataset}.json.bz2" + + if os.path.exists(dataset_path): + print(f"Dataset {dataset} already exists, skipping") + continue + + df = load(dataset) + + if "structure" in df: + df["composition"] = [struct.formula for struct in df.structure] + df["protostructure"] = df["structure"].progress_apply( + get_protostructure_label_from_spglib + ) + else: + raise ValueError("No structure or composition column found") + + df.to_json( + dataset_path, + default_handler=lambda x: x.as_dict(), + ) + + +DATA_PATHS = { + path.split("/")[-1].split(".")[0]: path + for path in glob(f"{current_dir}/datasets/matbench_*.json.bz2") +} + +assert len(DATA_PATHS) == len(matbench_datasets), ( + f"glob found {len(DATA_PATHS)} data sets, expected {len(matbench_datasets)}" +) diff --git a/examples/wrenformer/matbench/readme.md b/examples/matbench_example/readme.md similarity index 64% rename from examples/wrenformer/matbench/readme.md rename to examples/matbench_example/readme.md index c447f4fc..5ee6fc2c 100644 --- a/examples/wrenformer/matbench/readme.md +++ b/examples/matbench_example/readme.md @@ -1,31 +1,24 @@ # Matbench -This directory contains the files needed to create Matbench submissions for Roostformer and Wrenformer (structure tasks only for Wren) which are rewrites of Roost and Wren using PyTorch's builtin `TransformerEncoder` in favor of custom self-attention modules used by Roost and Wren. +This directory contains the files needed to create Matbench submissions for Roostformer and Wrenformer (structure tasks only for Wren) which are rewrites of Roost and Wren using PyTorch's builtin `TransformerEncoder` instead of the custom self-attention modules used by Roost and Wren. Added in [aviary#44](https://github.com/CompRhys/aviary/pull/44). -Directory is named `matbench` to avoid shadowing the `matbench` package. - -The important files are: - -- `run_matbench.py`: The function that trains and tests Roost- and Wrenformer models on a given Matbench task. -- `slurm_submit.py`: Launch a slurm array to train and evaluate models with a given set of hyperparameters on all Matbench tasks. Calls `run_matbench.py`. -- `featurize_matbench.py`: Generate Spglib Wyckoff labels for all 13 Matbench tasks. - -Less important files: - -- `make_plots.py`: Imports `plotting_functions.py` to visualize and compare ours against other models and different sets of hyperparams. -- `compare_spglib_vs_aflow_wyckoff_labels.py`: See module doc string. -- `wandb_api.py`: Change run metadata recorded on [Weights and Biases](https://wandb.ai/aviary/matbench) after the fact. - ## Speed difference between Wren and Wrenformer According to Rhys, Wren could run 500 epochs in 5.5 h on a P100 training on 120k samples of MP data (similar to the `matbench_mp_e_form` dataset with 132k samples). Wrenformer only managed 207 epochs in 4h on the more powerful A100 training on `matbench_mp_e_form`. However, to avoid out-of-memory issues, Rhys constrained Wren to only run on systems with <= 16 Wyckoff positions. The code below shows that this lightens the workload by a factor of about 7.5, likely explaining the apparent slowdown in Wrenformer. ```py +import os +import sys +from pathlib import Path + +# Add the parent directory to system path +sys.path.append(str(Path(__file__).parent.parent)) + import pandas as pd from pymatgen.analysis.prototypes import count_wyckoff_positions -from examples.wrenformer.matbench import DATA_PATHS +from matbench_example import DATA_PATHS df = pd.read_json(DATA_PATHS["matbench_mp_e_form"]) diff --git a/examples/wrenformer/matbench/train_wrenformer.py b/examples/matbench_example/train_wrenformer.py similarity index 71% rename from examples/wrenformer/matbench/train_wrenformer.py rename to examples/matbench_example/train_wrenformer.py index 103b5922..712e7992 100644 --- a/examples/wrenformer/matbench/train_wrenformer.py +++ b/examples/matbench_example/train_wrenformer.py @@ -1,30 +1,31 @@ +"""Train a Wrenformer ensemble of size n_folds on collection of Matbench datasets.""" + # %% import os +import sys +from pathlib import Path + +# Add the parent directory to system path +sys.path.append(str(Path(__file__).parent.parent)) + from datetime import datetime from itertools import product -import pandas as pd import wandb -from matbench_discovery.slurm import slurm_submit - -from aviary.core import TaskType -from aviary.train import train_wrenformer -from examples.wrenformer.matbench import DATA_PATHS -from examples.wrenformer.matbench.utils import merge_json_on_disk from matbench.metadata import mbv01_metadata from matbench.task import MatbenchTask +from matbench_example.prepare_matbench_datasets import DATA_PATHS +from matbench_example.trainer import train_wrenformer +from matbench_example.utils import merge_json_on_disk, slurm_submit +from matminer.utils.io import load_dataframe_from_json -__author__ = "Janosh Riebesell" -__date__ = "2022-04-11" +from aviary.core import TaskType MODULE_DIR = os.path.dirname(__file__) -""" -Train a Wrenformer ensemble of size n_folds on collection of Matbench datasets. -""" # %% -epochs = 300 +epochs = 10 folds = list(range(5)) timestamp = f"{datetime.now():%Y-%m-%d@%H-%M-%S}" today = timestamp.split("@")[0] @@ -38,8 +39,13 @@ datasets = list(DATA_PATHS) else: # deploy Wren on structure tasks only - datasets = [k for k, v in mbv01_metadata.items() if v.input_type == "structure"] + datasets = [ + k + for k, v in mbv01_metadata.items() + if v.input_type == "structure" and k in DATA_PATHS + ] +# NOTE: this script will run as is if you want to run it locally without slurm. slurm_submit( job_name=job_name, partition="ampere", @@ -65,7 +71,8 @@ data_path = DATA_PATHS[dataset_name] id_col = "mbid" -df = pd.read_json(data_path).set_index(id_col, drop=False) +df = load_dataframe_from_json(data_path) +df.index.name = id_col matbench_task = MatbenchTask(dataset_name, autoload=False) matbench_task.df = df @@ -78,6 +85,8 @@ train_df = matbench_task.get_train_and_val_data(fold, as_type="df") test_df = matbench_task.get_test_data(fold, as_type="df", include_target=True) +wandb_path = None + test_metrics, run_params, test_df = train_wrenformer( checkpoint=None, # None | 'local' | 'wandb' run_name=run_name, @@ -87,24 +96,31 @@ task_type=task_type, id_col=id_col, # set to None to disable logging - wandb_path="aviary/matbench", + wandb_path=wandb_path, run_params=dict(dataset=dataset_name, fold=fold), timestamp=timestamp, epochs=epochs, ) + +# %% # save model predictions to JSON preds_path = f"{MODULE_DIR}/model_preds/{timestamp}-{run_name}.json" +os.makedirs(os.path.dirname(preds_path), exist_ok=True) # record model predictions -preds_dict = test_df[[id_col, target_col, f"{target_col}_pred"]].to_dict(orient="list") +test_df[id_col] = test_df.index +preds_dict = test_df[[id_col, target_col, f"{target_col}_pred_0"]].to_dict(orient="list") merge_json_on_disk({dataset_name: {f"fold_{fold}": preds_dict}}, preds_path) # save model scores to JSON scores_path = f"{MODULE_DIR}/model_scores/{timestamp}-{run_name}.json" +os.makedirs(os.path.dirname(scores_path), exist_ok=True) + scores_dict = {dataset_name: {f"fold_{fold}": test_metrics}} scores_dict["params"] = run_params -scores_dict["wandb_run"] = wandb.run.get_url() +if wandb_path is not None: + scores_dict["wandb_run"] = wandb.run.get_url() merge_json_on_disk(scores_dict, scores_path) print(f"scores for {fold = } of task {dataset_name} written to {scores_path}") diff --git a/aviary/train.py b/examples/matbench_example/trainer.py similarity index 74% rename from aviary/train.py rename to examples/matbench_example/trainer.py index 8a1e6da3..86ebc77d 100644 --- a/aviary/train.py +++ b/examples/matbench_example/trainer.py @@ -1,37 +1,24 @@ -# ruff: noqa: E501 -from __future__ import annotations - import os from copy import deepcopy -from typing import TYPE_CHECKING, Any, Literal +from typing import Any, Literal import numpy as np import pandas as pd import torch +import wandb +from torch import nn from torch.utils.data import DataLoader from tqdm import tqdm from aviary import ROOT from aviary.core import BaseModelClass, Normalizer, TaskType, np_softmax +from aviary.data import InMemoryDataLoader from aviary.losses import robust_l1_loss +from aviary.predict import make_ensemble_predictions from aviary.utils import get_metrics, print_walltime from aviary.wrenformer.data import df_to_in_mem_dataloader from aviary.wrenformer.model import Wrenformer -try: - import wandb -except ImportError: - wandb = None # type: ignore[assignment] - -if TYPE_CHECKING: - from torch import nn - - from aviary.data import InMemoryDataLoader - -__author__ = "Janosh Riebesell" -__date__ = "2022-10-29" - - torch.manual_seed(0) # ensure reproducible results reg_key, clf_key = "regression", "classification" @@ -55,6 +42,7 @@ def train_model( task_type: TaskType, train_loader: DataLoader | InMemoryDataLoader, test_loader: DataLoader | InMemoryDataLoader, + *, # force keyword-only arguments checkpoint: Literal["local", "wandb"] | None = None, checkpoint_frequency: int = 10, learning_rate: float = 1e-4, @@ -74,18 +62,20 @@ def train_model( Wrapped by other functions like train_wrenformer() for specific datasets. Args: - run_name (str): A string to describe the training run. Should usually contain model type - (Roost/Wren) and important params. Include 'robust' to use a robust loss function and - have the model learn to predict an aleatoric uncertainty. + run_name (str): A string to describe the training run. Should usually contain + model type (Roost/Wren) and important params. Include 'robust' to use a + robust loss function and have the model learn to predict an aleatoric + uncertainty. model (BaseModelClass): A model instance subclassing aviary.core.BaseModelClass. epochs (int): How many epochs to train for. Defaults to 100. target_col (str): Name of df column containing the target values. - task_type ('regression' | 'classification'): What type of task to train the model for. - test_loader (DataLoader | InMemoryDataLoader): Test data. - train_loader (DataLoader | InMemoryDataLoader): Train data. - checkpoint (None | 'local' | 'wandb'): Whether to save the model+optimizer+scheduler state - dicts to disk (local) or upload to WandB. Defaults to None. - To later copy a wandb checkpoint file to cwd and use it: + task_type ('regression' | 'classification'): What type of task to train the + model for. + train_loader (DataLoader | InMemoryDataLoader): Training data loader. + test_loader (DataLoader | InMemoryDataLoader): Test data loader. + checkpoint (None | 'local' | 'wandb'): Whether to save the model, optimizer, + and scheduler state dicts to disk (local) or upload to WandB. + Defaults to None. To later copy a wandb checkpoint file to cwd and use it: ```py run_path = "//" # e.g. aviary/matbench/31qh7b5q checkpoint = wandb.restore("checkpoint.pth", run_path) @@ -97,39 +87,42 @@ def train_model( embedding_aggregation=("mean", "std")) for Wrenformer. run_params (dict[str, Any]): Additional parameters to merge into the run's dict of model_params. Will be logged to wandb. Can be anything really. Defaults to {}. - optimizer (str | tuple[str, dict]): Name of a torch.optim.Optimizer class like 'Adam', - 'AdamW', 'SGD', etc. Can be a string or a string and dict with params to pass to the - class. Defaults to 'AdamW'. + optimizer (str | tuple[str, dict]): Name of a torch.optim.Optimizer class like + 'Adam', 'AdamW', 'SGD', etc. Can be a string or a string and dict with params + to pass to the class. Defaults to 'AdamW'. scheduler (str | tuple[str, dict]): Name of a torch.optim.lr_scheduler class like - 'LambdaLR', 'StepLR', 'CosineAnnealingLR', etc. Defaults to 'LambdaLR'. Can be a string - to create a scheduler with all its default values or tuple[str, dict] with custom params - to pass to the class. E.g. ('CosineAnnealingLR', {'T_max': n_epochs}). - See https://stackoverflow.com/a/2121918 about pickle errors when trying to load a - LambdaLR scheduler from a torch.save() checkpoint created prior to this file having - been renamed. - swa_start (float | None): When to start using stochastic weight averaging during training. - Should be a float between 0 and 1. 0.7 means start SWA after 70% of epochs. Set to - None to disable SWA. Defaults to None. Proposed in https://arxiv.org/abs/1803.05407. - swa_lr (float): Learning rate for SWA scheduler. Defaults to learning_rate. - by the transformer encoder before passing into the ResidualNetwork. One or more of - ['mean', 'std', 'sum', 'min', 'max']. Defaults to ['mean']. - test_df (pd.DataFrame): Test data as a DataFrame. Model preds will be inserted as new - column and df returned. - timestamp (str): Will prefix the names of model checkpoint files and other output files. - Will also be included in run_params. Defaults to None. - verbose (bool): Whether to print progress and metrics to stdout. Defaults to False. - wandb_path (str | None): Path to Weights and Biases project where to log this run formatted - as '/'. Defaults to None which means logging is disabled. - wandb_kwargs (dict[str, Any]): Kwargs to pass to wandb.init() like - dict(tags=['ensemble-id-1']). Should not include keys config, project, entity as - they're already set by this function. + 'LambdaLR', 'StepLR', 'CosineAnnealingLR', etc. Can be a string to create a + scheduler with default values or tuple[str, dict] with custom params. + E.g. ('CosineAnnealingLR', {'T_max': n_epochs}). Defaults to 'LambdaLR'. + See https://stackoverflow.com/a/2121918 about pickle errors when trying to + load a LambdaLR scheduler from a torch.save() checkpoint created prior to this + file having been renamed. + swa_start (float | None): When to start using stochastic weight averaging during + training. Should be a float between 0 and 1. 0.7 means start SWA after 70% + of epochs. Set to None to disable SWA. Defaults to None. Proposed in + https://arxiv.org/abs/1803.05407. + swa_lr (float | None): Learning rate for SWA scheduler. Defaults to learning_rate. + test_df (pd.DataFrame): Test data as a DataFrame. Model preds will be inserted + as new columns and df returned. + timestamp (str | None): Will prefix the names of model checkpoint files and other + output files. Will also be included in run_params. Defaults to None. + verbose (bool): Whether to print progress and metrics to stdout. Defaults to + False. + wandb_path (str | None): Path to Weights and Biases project where to log this run + formatted as '/'. Defaults to None which means logging is + disabled. + wandb_kwargs (dict[str, Any] | None): Kwargs to pass to wandb.init() like + dict(tags=['ensemble-id-1']). Should not include keys config, project, entity + as they're already set by this function. Defaults to None. Raises: ValueError: On unknown dataset_name or invalid checkpoint. Returns: - tuple[dict[str, float], dict[str, Any]]: 1st dict are the model's test set metrics. - 2nd dict are the run's hyperparameters. 3rd is a dataframe with test set predictions. + tuple[dict[str, float], dict[str, Any], pd.DataFrame]: A tuple containing: + - Test set metrics dictionary + - Run hyperparameters dictionary + - Test dataframe with predictions """ if checkpoint not in (None, "local", "wandb"): raise ValueError(f"Unknown {checkpoint=}") @@ -161,10 +154,11 @@ def train_model( model.to(device) if isinstance(optimizer, str): optimizer_name, optimizer_params = optimizer, None - elif isinstance(optimizer, (tuple, list)): + elif isinstance(optimizer, tuple | list): optimizer_name, optimizer_params = optimizer else: - raise ValueError(f"Unknown {optimizer=}") + raise TypeError(f"Unknown {optimizer=}") + optimizer_cls = getattr(torch.optim, optimizer_name) optimizer_instance = optimizer_cls( params=model.parameters(), lr=learning_rate, **(optimizer_params or {}) @@ -174,10 +168,11 @@ def train_model( scheduler_name, scheduler_params = "LambdaLR", {"lr_lambda": lr_lambda} elif isinstance(scheduler, str): scheduler_name, scheduler_params = scheduler, None - elif isinstance(scheduler, (tuple, list)): + elif isinstance(scheduler, tuple | list): scheduler_name, scheduler_params = scheduler else: raise ValueError(f"Unknown {scheduler=}") + scheduler_cls = getattr(torch.optim.lr_scheduler, scheduler_name) lr_scheduler = scheduler_cls(optimizer_instance, **(scheduler_params or {})) @@ -252,8 +247,8 @@ def train_model( if swa_start and epoch >= int(swa_start * epochs): if epoch == int(swa_start * epochs): print("Starting stochastic weight averaging...") - swa_model.update_parameters(model) - swa_scheduler.step() + swa_model.update_parameters(model) # type: ignore[reportPossiblyUnboundVariable] + swa_scheduler.step() # type: ignore[reportPossiblyUnboundVariable] elif scheduler_name == "ReduceLROnPlateau": val_metric = val_metrics[target_col][ "MAE" if task_type == reg_key else "Accuracy" @@ -268,7 +263,7 @@ def train_model( wandb.log({"training": train_metrics, "validation": val_metrics}) if epoch % checkpoint_frequency == 0 and epoch < epochs: - inference_model = swa_model if swa_start else model + inference_model = swa_model if swa_start else model # type: ignore[reportPossiblyUnboundVariable] inference_model.eval() checkpoint_model( checkpoint_endpoint=checkpoint, @@ -294,7 +289,7 @@ def train_model( f"({swa_start=})" ) - inference_model = swa_model if swa_start else model + inference_model = swa_model if swa_start else model # type: ignore[reportPossiblyUnboundVariable] inference_model.eval() with torch.no_grad(): @@ -315,7 +310,8 @@ def train_model( ).squeeze() if test_df is None: - assert isinstance(test_loader, DataLoader) + if not isinstance(test_loader, DataLoader): + raise TypeError(f"Unknown {test_loader=}") test_df = test_loader.dataset.df if robust: @@ -399,7 +395,7 @@ def checkpoint_model( normalizer_dict: dict, run_params: dict, scheduler_name: str, -): +) -> None: """Save model checkpoint to different endpoints.""" if checkpoint_endpoint is None: return @@ -433,12 +429,13 @@ def checkpoint_model( torch.save(checkpoint_dict, checkpoint_path) if checkpoint_endpoint == "wandb": - assert wandb.run is not None, ( - "can't save model checkpoint to Weights and Biases, wandb.run is None" - ) + if wandb.run is None: + raise ValueError( + "can't save model checkpoint to Weights and Biases, wandb.run is None" + ) torch.save( checkpoint_dict, - f"{wandb.run.dir}/{timestamp + '-' if timestamp else ''}{run_name}-{epochs}.pth", + f"{wandb.run.dir}/{timestamp + '-' if timestamp else ''}{run_name}-{epochs}.pth", # noqa: E501 ) @@ -455,7 +452,7 @@ def train_wrenformer( input_col: str | None = None, model_params: dict[str, Any] | None = None, data_loader_device: str = "cpu", - **kwargs, + **kwargs: Any, ) -> tuple[dict[str, float], dict[str, Any], pd.DataFrame]: """Train a Wrenformer model on a dataframe. This function handles the DataLoader creation, then delegates to train_model(). @@ -473,13 +470,14 @@ def train_wrenformer( batch_size (int, optional): Batch size for training. Defaults to 128. inference_multiplier (int, optional): Multiplier for the test set data loader batch size. Defaults to 1. - embedding_type ('wyckoff' | 'composition', optional): Type of embedding to use. - Defaults to None meaning auto-detect based on 'wren'/'roost' in run_name. + embedding_type ('protostructure' | 'composition', optional): Type of + embedding to use. Defaults to None meaning auto-detect based on 'wren'/'roost' + in run_name. id_col (str, optional): Column name in train_df and test_df containing unique IDs for each sample. Defaults to "material_id". input_col (str, optional): Column name in train_df and test_df containing input values. Defaults to None meaning auto-detect based on 'wren'/'roost' in - run_name which default to 'wyckoff' and 'composition' respectively. + run_name which default to 'protostructure' and 'composition' respectively. model_params (dict): Passed to Wrenformer class. E.g. dict(n_attn_layers=6, embedding_aggregation=("mean", "std")). data_loader_device(str): device to store the InMemoryDataLoader's tensors on. @@ -493,8 +491,8 @@ def train_wrenformer( robust = "robust" in run_name.lower() if "wren" in run_name.lower(): - input_col = input_col or "wyckoff" - embedding_type = embedding_type or "wyckoff" + input_col = input_col or "protostructure" + embedding_type = embedding_type or "protostructure" elif "roost" in run_name.lower(): input_col = input_col or "composition" embedding_type = embedding_type or "composition" @@ -528,7 +526,8 @@ def train_wrenformer( # element) in the material embedding_len = train_loader.tensors[0][0].shape[-1] # Roost and Wren embedding size resp. - assert embedding_len in (200 + 1, 200 + 1 + 444), f"{embedding_len=}" + if embedding_len not in (200 + 1, 200 + 1 + 444): + raise ValueError(f"{embedding_len=}, expected 201 or 645") model_params = dict( # 1 for regression, n_classes for classification @@ -576,29 +575,90 @@ def df_train_test_split( Or if not 0 < test_size < 1 or not 1 < n_folds <= 10. Returns: - tuple[pd.DataFrame, pd.DataFrame]: _description_ + tuple[pd.DataFrame, pd.DataFrame]: Train and test sets. """ # shuffle samples for random train/test split - df = df.sample(frac=1, random_state=0) + df_all = df.sample(frac=1, random_state=0) if folds: n_folds, test_fold_idx = folds - assert 1 < n_folds <= 10, f"{n_folds = } must be between 2 and 10" - assert 0 <= test_fold_idx < n_folds, ( - f"{test_fold_idx = } must be between 0 and {n_folds - 1}" - ) + if not 1 < n_folds <= 10: + raise ValueError(f"{n_folds = } must be between 2 and 10") + if not 0 <= test_fold_idx < n_folds: + raise ValueError(f"{test_fold_idx = } must be between 0 and {n_folds - 1}") - df_splits: list[pd.DataFrame] = np.array_split(df, n_folds) + df_splits: list[pd.DataFrame] = np.array_split(df_all, n_folds) test_df = df_splits.pop(test_fold_idx) train_df = pd.concat(df_splits) elif test_size: - assert 0 < test_size < 1, f"{test_size = } must be between 0 and 1" + if not 0 < test_size < 1: + raise ValueError(f"{test_size = } must be between 0 and 1") - train_df = df.sample(frac=1 - test_size, random_state=0) - test_df = df.drop(train_df.index) + train_df = df_all.sample(frac=1 - test_size, random_state=0) + test_df = df_all.drop(train_df.index) else: raise ValueError(f"Specify either {folds=} or {test_size=}") if folds and test_size: raise ValueError(f"Specify either {folds=} or {test_size=}, not both") return train_df, test_df + + +@print_walltime(end_desc="predict_from_wandb_checkpoints") +def predict_from_wandb_checkpoints( + runs: list[wandb.apis.public.Run], + checkpoint_filename: str = "checkpoint.pth", + cache_dir: str = "./checkpoint_cache", + **kwargs: Any, +) -> pd.DataFrame | tuple[pd.DataFrame, pd.DataFrame]: + """Download and cache checkpoints for an ensemble of models, then make + predictions on some dataset. Finally print ensemble metrics and store + predictions to CSV. + + Args: + runs (list[wandb.apis.public.Run]): List of WandB runs to download model + checkpoints from which are then loaded into memory to generate + predictions for the input_col in df. + checkpoint_filename (str): Name of the checkpoint file to download. + cache_dir (str): Directory to cache downloaded checkpoints in. + **kwargs: Additional keyword arguments to pass to make_ensemble_predictions(). + + Returns: + pd.DataFrame | tuple[pd.DataFrame, pd.DataFrame]: Original input dataframe + with added columns for model predictions and uncertainties. The optional + 2nd dataframe holds ensemble performance metrics like mean and standard + deviation of MAE/RMSE. + """ + print(f"Using checkpoints from {len(runs)} run(s):") + + run_target = runs[0].config["target"] + if not all(run_target == run.config["target"] for run in runs): + raise ValueError(f"Runs have differing targets, first {run_target=}") + + target_col = kwargs.get("target_col") + if target_col and target_col != run_target: + print(f"\nWarning: {target_col=} does not match {run_target=}") + + checkpoint_paths: list[str] = [] + + for idx, run in enumerate(runs, start=1): + run_path = "/".join(run.path) + out_dir = f"{cache_dir}/{run_path}" + os.makedirs(out_dir, exist_ok=True) + + checkpoint_path = f"{out_dir}/{checkpoint_filename}" + checkpoint_paths.append(checkpoint_path) + print(f"{idx:>3}/{len(runs)}: {run.url}\n\t{checkpoint_path}\n") + + with open(f"{out_dir}/run.md", "w") as md_file: + md_file.write(f"[{run.name}]({run.url})\n") + + if not os.path.isfile(checkpoint_path): + run.file(f"{checkpoint_filename}").download(root=out_dir) + + if target_col is not None: + df_ens, ensemble_metrics = make_ensemble_predictions(checkpoint_paths, **kwargs) + # round to save disk space and speed up cloud storage uploads + return df_ens.round(6), ensemble_metrics + + return make_ensemble_predictions(checkpoint_paths, **kwargs) diff --git a/examples/matbench_example/utils.py b/examples/matbench_example/utils.py new file mode 100644 index 00000000..a0b698f6 --- /dev/null +++ b/examples/matbench_example/utils.py @@ -0,0 +1,195 @@ +import json +import os +import shutil +import subprocess +import sys +import tempfile +from collections.abc import Sequence, Sized +from typing import Final, Literal, TypeVar + +# taken from https://slurm.schedmd.com/job_array.html#env_vars, lower-cased and +# and removed the SLURM_ prefix +SLURM_KEYS: Final[tuple[str, ...]] = ( + "job_id", + "array_job_id", + "array_task_id", + "array_task_count", + "mem_per_node", + "nodelistsubmit_host", + "job_partition", + "job_user", + "job_account", + "tasks_per_node", + "job_qos", +) +SLURM_SUBMIT_KEY: Final[str] = "slurm-submit" +HasLen = TypeVar("HasLen", bound=Sized) + + +def _int_keys(dct: dict) -> dict: + # JSON stringifies all dict keys during serialization and does not revert + # back to floats and ints during parsing. This json.load() hook converts keys + # containing only digits to ints. + return {int(k) if k.lstrip("-").isdigit() else k: v for k, v in dct.items()} + + +def recursive_dict_merge(dict1: dict, dict2: dict) -> dict: + """Merge two dicts recursively.""" + for key, val2 in dict2.items(): + if key in dict1 and isinstance(dict1[key], dict) and isinstance(val2, dict): + recursive_dict_merge(dict1[key], val2) + else: + dict1[key] = val2 + return dict1 + + +def merge_json_on_disk( + dct: dict, + file_path: str, + on_non_serializable: Literal["annotate", "error"] = "annotate", +) -> None: + """Merge a dict into a (possibly) existing JSON file. + + Args: + file_path (str): Path to JSON file. File will be created if not exist. + dct (dict): Dictionary to merge into JSON file. + on_non_serializable ('annotate' | 'error'): What to do with non-serializable + values encountered in dct. 'annotate' will replace the offending object with + a string indicating the type, e.g. ''. 'error' + will raise 'TypeError: Object of type function is not JSON serializable'. + Defaults to 'annotate'. + """ + try: + with open(file_path) as json_file: + data = json.load(json_file, object_hook=_int_keys) + + dct = recursive_dict_merge(data, dct) + except (FileNotFoundError, json.decoder.JSONDecodeError): # file missing or empty + pass + + def non_serializable_handler(obj: object) -> str: + # replace functions and classes in dct with string indicating it's a + # non-serializable type + return f"" + + with open(file_path, "w") as file: + default = non_serializable_handler if on_non_serializable == "annotate" else None + json.dump(dct, file, default=default, indent=2) + + +def _get_calling_file_path(frame: int = 1) -> str: + """Return calling file's path. + + Args: + frame (int, optional): How many function call's up? Defaults to 1. + + Returns: + str: Calling function's file path n frames up the stack. + """ + caller_path = sys._getframe(frame).f_code.co_filename + return os.path.abspath(caller_path) + + +def slurm_submit( + job_name: str, + out_dir: str, + *, + time: str | None = None, + account: str | None = None, + partition: str | None = None, + py_file_path: str | None = None, + slurm_flags: str | Sequence[str] = (), + array: str | None = None, + pre_cmd: str = "", + submit_as_temp_file: bool = True, +) -> dict[str, str]: + """Slurm submits a python script using `sbatch --wrap 'python path/to/file.py'`. + + Usage: Call this function at the top of the script (before doing any real work) and + then submit a job with `python path/to/that/script.py slurm-submit`. The slurm job + will run the whole script. + + Args: + job_name (str): Slurm job name. + out_dir (str): Directory to write slurm logs. Log file will include slurm job + ID and array task ID. + time (str): 'HH:MM:SS' time limit for the job. + Defaults to the path of the file calling slurm_submit(). + account (str): Account to charge for this job. + partition (str, optional): Slurm partition. + py_file_path (str, optional): Path to the python script to be submitted. + slurm_flags (str | list[str], optional): Extra slurm CLI flags. Defaults to (). + Examples: ('--nodes 1', '--gpus-per-node 1') or ('--mem', '16G'). + array (str, optional): Slurm array specifier. Defaults to None. Example: + '9' (for SLURM_ARRAY_TASK_ID from 0-9 inclusive), '1-10' or '1-10%2', etc. + pre_cmd (str, optional): Things like `module load` commands and environment + variables to set before running the python script go here. Example: + pre_cmd='ENV_VAR=42' or 'module load pytorch;'. Defaults to "". If running + on CPU, pre_cmd="unset OMP_NUM_THREADS" allows PyTorch to use all cores. + submit_as_temp_file (bool, optional): If True, copy the Python file to a + temporary directory before submitting. This allows the user to modify + the original file without affecting queued jobs. Defaults to True. + + Raises: + SystemExit: Exit code will be subprocess.run(['sbatch', ...]).returncode. + + Returns: + dict[str, str]: Slurm variables like job ID, array task ID, compute nodes IDs, + submission node ID and total job memory. + """ + py_file_path = py_file_path or _get_calling_file_path(frame=2) + + os.makedirs(out_dir, exist_ok=True) # slurm fails if out_dir is missing + + # Copy the file to a temporary directory if submit_as_temp_file is True + if submit_as_temp_file and SLURM_SUBMIT_KEY in sys.argv: + temp_dir = tempfile.mkdtemp(prefix="slurm_job_") + temp_file_path = f"{temp_dir}/{os.path.basename(py_file_path)}" + shutil.copy2(py_file_path, temp_file_path) + py_file_path = temp_file_path + + # ensure pre_cmd ends with a semicolon + if pre_cmd and not pre_cmd.strip().endswith(";"): + pre_cmd += ";" + + cmd = [ + *("sbatch", "--job-name", job_name), + *("--output", f"{out_dir}/slurm-%A{'-%a' if array else ''}.log"), + *(slurm_flags.split() if isinstance(slurm_flags, str) else slurm_flags), + *("--wrap", f"{pre_cmd or ''} python {py_file_path}".strip()), + ] + for flag in (f"{time=!s}", f"{account=!s}", f"{partition=!s}", f"{array=!s}"): + key, val = flag.split("=") + if val != "None": + cmd += (f"--{key}", val) + + is_log_file = not sys.stdout.isatty() + is_slurm_job = "SLURM_JOB_ID" in os.environ + + slurm_vars = { + f"slurm_{key}": os.environ[f"SLURM_{key}".upper()] + for key in SLURM_KEYS + if f"SLURM_{key}".upper() in os.environ + } + if time is not None: + slurm_vars["slurm_timelimit"] = time + if slurm_flags != (): + slurm_vars["slurm_flags"] = str(slurm_flags) + if pre_cmd not in ("", None): + slurm_vars["pre_cmd"] = pre_cmd + + # print sbatch command into slurm log file and at job submission time + # but not into terminal or Jupyter + if (is_slurm_job and is_log_file) or SLURM_SUBMIT_KEY in sys.argv: + print(f"\n{' '.join(cmd)}\n".replace(" --", "\n --")) + if is_slurm_job and is_log_file: + for key, val in slurm_vars.items(): + print(f"{key}={val}") + + if SLURM_SUBMIT_KEY not in sys.argv: + return slurm_vars # if not submitting slurm job, resume outside code as normal + + result = subprocess.run(cmd, check=True) + + # after sbatch submission, exit with slurm exit code + raise SystemExit(result.returncode) diff --git a/examples/notebooks/Roost.ipynb b/examples/notebooks/Roost.ipynb index 74379cde..ec802b15 100644 --- a/examples/notebooks/Roost.ipynb +++ b/examples/notebooks/Roost.ipynb @@ -8,12 +8,21 @@ "outputs": [], "source": [ "%%capture\n", - "from torch import __version__ as TORCH_VERSION\n", + "try:\n", + " import google.colab # noqa: F401\n", "\n", - "print(f\"{TORCH_VERSION=}\")\n", + " IN_COLAB = True\n", + "except ImportError:\n", + " IN_COLAB = False\n", "\n", - "!pip install -U git+https://github.com/CompRhys/aviary.git # install aviary\n", - "!wget -O taata.json.gz https://figshare.com/ndownloader/files/34423997" + "if IN_COLAB:\n", + " %%capture\n", + " from torch import __version__ as TORCH_VERSION\n", + "\n", + " print(f\"{TORCH_VERSION=}\")\n", + "\n", + " !pip install -U git+https://github.com/CompRhys/aviary.git # install aviary\n", + " !wget -O taata.json.gz https://figshare.com/ndownloader/files/34423997" ] }, { @@ -34,6 +43,7 @@ ")\n", "from pymatgen.core import Structure\n", "from sklearn.model_selection import train_test_split as split\n", + "from torch.utils.data import DataLoader\n", "\n", "from aviary.roost.data import CompositionData\n", "from aviary.roost.data import collate_batch as roost_cb\n", @@ -60,9 +70,9 @@ "\n", "df[\"composition\"] = [x.composition.reduced_formula for x in df.final_structure]\n", "df[\"volume_per_atom\"] = [x.volume / len(x) for x in df.final_structure]\n", - "df[\"wyckoff\"] = df[\"final_structure\"].map(get_protostructure_label_from_spglib)\n", + "df[\"protostructure\"] = df[\"final_structure\"].map(get_protostructure_label_from_spglib)\n", "\n", - "df = df[df.wyckoff.map(count_wyckoff_positions) < 16]\n", + "df = df[df.protostructure.map(count_wyckoff_positions) < 16]\n", "df[\"n_sites\"] = df.final_structure.map(len)\n", "df = df[df.n_sites < 64]\n", "df = df[df.volume_per_atom < 500]\n", @@ -130,8 +140,8 @@ " \"transfer\": transfer,\n", "}\n", "\n", - "task_dict = dict(zip(targets, tasks))\n", - "loss_dict = dict(zip(targets, losses))" + "task_dict = dict(zip(targets, tasks, strict=False))\n", + "loss_dict = dict(zip(targets, losses, strict=False))" ] }, { @@ -172,6 +182,12 @@ "\n", "train_set = torch.utils.data.Subset(dataset, train_idx[0::sample])\n", "\n", + "train_loader = DataLoader(train_set, **data_params)\n", + "val_loader = DataLoader(\n", + " val_set,\n", + " **{**data_params, \"batch_size\": 16 * data_params[\"batch_size\"], \"shuffle\": False},\n", + ")\n", + "\n", "model_params = {\n", " \"task_dict\": task_dict,\n", " \"robust\": robust,\n", @@ -205,7 +221,10 @@ " loss_dict=loss_dict,\n", ")\n", "\n", - "data_params[\"shuffle\"] = False # need fixed data order due to ensembling\n", + "test_loader = DataLoader(\n", + " test_set,\n", + " **{**data_params, \"batch_size\": 64 * data_params[\"batch_size\"], \"shuffle\": False},\n", + ")\n", "\n", "roost_results_dict = results_multitask(\n", " model_class=Roost,\n", diff --git a/examples/notebooks/Wren.ipynb b/examples/notebooks/Wren.ipynb index 413d4981..3a41df2c 100644 --- a/examples/notebooks/Wren.ipynb +++ b/examples/notebooks/Wren.ipynb @@ -8,12 +8,21 @@ "outputs": [], "source": [ "%%capture\n", - "from torch import __version__ as TORCH_VERSION\n", + "try:\n", + " import google.colab # noqa: F401\n", "\n", - "print(f\"{TORCH_VERSION=}\")\n", + " IN_COLAB = True\n", + "except ImportError:\n", + " IN_COLAB = False\n", "\n", - "!pip install -U git+https://github.com/CompRhys/aviary.git # install aviary\n", - "!wget -O taata.json.gz https://figshare.com/ndownloader/files/34423997" + "if IN_COLAB:\n", + " %%capture\n", + " from torch import __version__ as TORCH_VERSION\n", + "\n", + " print(f\"{TORCH_VERSION=}\")\n", + "\n", + " !pip install -U git+https://github.com/CompRhys/aviary.git # install aviary\n", + " !wget -O taata.json.gz https://figshare.com/ndownloader/files/34423997" ] }, { @@ -34,6 +43,7 @@ ")\n", "from pymatgen.core import Structure\n", "from sklearn.model_selection import train_test_split as split\n", + "from torch.utils.data import DataLoader\n", "\n", "from aviary.utils import results_multitask, train_ensemble\n", "from aviary.wren.data import WyckoffData\n", @@ -60,9 +70,9 @@ "\n", "df[\"composition\"] = [x.composition.reduced_formula for x in df.final_structure]\n", "df[\"volume_per_atom\"] = [x.volume / len(x) for x in df.final_structure]\n", - "df[\"wyckoff\"] = df[\"final_structure\"].map(get_protostructure_label_from_spglib)\n", + "df[\"protostructure\"] = df[\"final_structure\"].map(get_protostructure_label_from_spglib)\n", "\n", - "df = df[df.wyckoff.map(count_wyckoff_positions) < 16]\n", + "df = df[df.protostructure.map(count_wyckoff_positions) < 16]\n", "df[\"n_sites\"] = df.final_structure.map(len)\n", "df = df[df.n_sites < 64]\n", "df = df[df.volume_per_atom < 500]" @@ -125,8 +135,8 @@ " \"transfer\": transfer,\n", "}\n", "\n", - "task_dict = dict(zip(targets, tasks))\n", - "loss_dict = dict(zip(targets, losses))" + "task_dict = dict(zip(targets, tasks, strict=False))\n", + "loss_dict = dict(zip(targets, losses, strict=False))" ] }, { @@ -167,6 +177,12 @@ "\n", "train_set = torch.utils.data.Subset(dataset, train_idx[0::sample])\n", "\n", + "train_loader = DataLoader(train_set, **data_params)\n", + "val_loader = DataLoader(\n", + " val_set,\n", + " **{**data_params, \"batch_size\": 16 * data_params[\"batch_size\"], \"shuffle\": False},\n", + ")\n", + "\n", "model_params = {\n", " \"task_dict\": task_dict,\n", " \"robust\": robust,\n", @@ -192,25 +208,26 @@ " run_id=run_id,\n", " ensemble_folds=ensemble,\n", " epochs=epochs,\n", - " train_set=train_set,\n", - " val_set=val_set,\n", + " train_loader=train_loader,\n", + " val_loader=val_loader,\n", " log=log,\n", - " data_params=data_params,\n", " setup_params=setup_params,\n", " restart_params=restart_params,\n", " model_params=model_params,\n", " loss_dict=loss_dict,\n", ")\n", "\n", - "data_params[\"shuffle\"] = False # need fixed data order due to ensembling\n", + "test_loader = DataLoader(\n", + " test_set,\n", + " **{**data_params, \"batch_size\": 64 * data_params[\"batch_size\"], \"shuffle\": False},\n", + ")\n", "\n", "roost_results_dict = results_multitask(\n", " model_class=Wren,\n", " model_name=model_name,\n", " run_id=run_id,\n", " ensemble_folds=ensemble,\n", - " test_set=test_set,\n", - " data_params=data_params,\n", + " test_loader=test_loader,\n", " robust=robust,\n", " task_dict=task_dict,\n", " device=device,\n", diff --git a/examples/notebooks/Wrenformer.ipynb b/examples/notebooks/Wrenformer.ipynb new file mode 100644 index 00000000..86780193 --- /dev/null +++ b/examples/notebooks/Wrenformer.ipynb @@ -0,0 +1,356 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "0", + "metadata": {}, + "outputs": [], + "source": [ + "%%capture\n", + "try:\n", + " import google.colab # noqa: F401\n", + "\n", + " IN_COLAB = True\n", + "except ImportError:\n", + " IN_COLAB = False\n", + "\n", + "if IN_COLAB:\n", + " %%capture\n", + " from torch import __version__ as TORCH_VERSION\n", + "\n", + " print(f\"{TORCH_VERSION=}\")\n", + "\n", + " !pip install -U git+https://github.com/CompRhys/aviary.git # install aviary\n", + " !wget -O taata.json.gz https://figshare.com/ndownloader/files/34423997" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1", + "metadata": {}, + "outputs": [], + "source": [ + "import gzip\n", + "import json\n", + "\n", + "import pandas as pd\n", + "import torch\n", + "from pymatgen.analysis.prototypes import (\n", + " count_wyckoff_positions,\n", + " get_protostructure_label_from_spglib,\n", + ")\n", + "from pymatgen.core import Structure\n", + "from sklearn.model_selection import train_test_split as split\n", + "\n", + "from aviary.utils import results_multitask, train_ensemble\n", + "from aviary.wrenformer.data import collate_batch as wrenformer_cb\n", + "from aviary.wrenformer.data import df_to_in_mem_dataloader\n", + "from aviary.wrenformer.model import Wrenformer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n", + "spglib: ssm_get_exact_positions failed.\n", + "spglib: get_bravais_exact_positions_and_lattice failed.\n" + ] + } + ], + "source": [ + "with gzip.open(\"taata.json.gz\", \"r\") as fin:\n", + " json_bytes = fin.read()\n", + "\n", + "json_str = json_bytes.decode(\"utf-8\")\n", + "data = json.loads(json_str)\n", + "\n", + "df = pd.DataFrame(data[\"data\"], columns=data[\"columns\"])\n", + "\n", + "df[\"final_structure\"] = [Structure.from_dict(x) for x in df.final_structure]\n", + "\n", + "df[\"composition\"] = [x.composition.reduced_formula for x in df.final_structure]\n", + "df[\"volume_per_atom\"] = [x.volume / len(x) for x in df.final_structure]\n", + "df[\"protostructure\"] = df[\"final_structure\"].map(get_protostructure_label_from_spglib)\n", + "\n", + "df = df[df.protostructure.map(count_wyckoff_positions) < 16]\n", + "df[\"n_sites\"] = df.final_structure.map(len)\n", + "df = df[df.n_sites < 64]\n", + "df = df[df.volume_per_atom < 500]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3", + "metadata": {}, + "outputs": [], + "source": [ + "resume = False\n", + "fine_tune = None\n", + "transfer = None\n", + "\n", + "optim = \"AdamW\"\n", + "learning_rate = 3e-4\n", + "momentum = 0.9\n", + "weight_decay = 1e-6\n", + "batch_size = 128\n", + "workers = 0\n", + "device = torch.device(\"cuda\") if torch.cuda.is_available() else torch.device(\"cpu\")\n", + "\n", + "targets = [\"E_vasp_per_atom\"]\n", + "tasks = [\"regression\"]\n", + "losses = [\"L1\"]\n", + "robust = True\n", + "\n", + "data_seed = 42\n", + "test_size = 0.2\n", + "sample = 1\n", + "\n", + "ensemble = 1\n", + "run_id = 1\n", + "epochs = 3\n", + "log = False\n", + "\n", + "# NOTE setting workers to zero means that the data is loaded in the main\n", + "# process and enables caching\n", + "\n", + "data_params = {\n", + " \"batch_size\": batch_size,\n", + " \"num_workers\": workers,\n", + " \"pin_memory\": False,\n", + " \"shuffle\": True,\n", + "}\n", + "\n", + "setup_params = {\n", + " \"optim\": optim,\n", + " \"learning_rate\": learning_rate,\n", + " \"weight_decay\": weight_decay,\n", + " \"momentum\": momentum,\n", + " \"device\": device,\n", + "}\n", + "\n", + "restart_params = {\n", + " \"resume\": resume,\n", + " \"fine_tune\": fine_tune,\n", + " \"transfer\": transfer,\n", + "}\n", + "\n", + "task_dict = dict(zip(targets, tasks, strict=False))\n", + "loss_dict = dict(zip(targets, losses, strict=False))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "using 0.2 of training set as test set\n", + "No validation set used, using test set for evaluation purposes\n", + "Total Number of Trainable Parameters: 5,166,658\n", + "Dummy MAE: 0.9223\n", + "Epoch: [0/2]\n", + " train: E_vasp_per_atom N 76 MAE 0.89 Loss 1.09 RMSE 1.13 \n", + " evaluate: E_vasp_per_atom N 2 MAE 0.71 Loss 0.83 RMSE 0.95 \n", + "Epoch: [1/2]\n", + " train: E_vasp_per_atom N 76 MAE 0.57 Loss 0.60 RMSE 0.78 \n", + " evaluate: E_vasp_per_atom N 2 MAE 0.53 Loss 0.51 RMSE 0.71 \n", + "Epoch: [2/2]\n", + " train: E_vasp_per_atom N 76 MAE 0.45 Loss 0.36 RMSE 0.62 \n", + " evaluate: E_vasp_per_atom N 2 MAE 0.37 Loss 0.19 RMSE 0.52 \n", + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "------------Evaluate model on Test Set------------\n", + "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n", + "\n", + "Evaluating Model\n", + "\n", + "Task: target_name='E_vasp_per_atom' on test set\n", + "Model Performance Metrics:\n", + "R2 Score: 0.7842 \n", + "MAE: 0.3913\n", + "RMSE: 0.5500\n" + ] + } + ], + "source": [ + "torch.manual_seed(0) # ensure reproducible results\n", + "\n", + "input_col = \"protostructure\"\n", + "embedding_type = \"protostructure\"\n", + "model_name = \"wrenformer-reg-test\"\n", + "\n", + "data_params[\"collate_fn\"] = wrenformer_cb\n", + "data_params[\"shuffle\"] = True\n", + "\n", + "print(f\"using {test_size} of training set as test set\")\n", + "train_df, test_df = split(df, random_state=data_seed, test_size=test_size)\n", + "\n", + "print(\"No validation set used, using test set for evaluation purposes\")\n", + "# NOTE that when using this option care must be taken not to\n", + "# peak at the test-set. The only valid model to use is the one\n", + "# obtained after the final epoch where the epoch count is\n", + "# decided in advance of the experiment.\n", + "val_df = test_df\n", + "\n", + "data_loader_kwargs = dict(\n", + " id_col=\"material_id\", # TODO this should take a list of columns\n", + " input_col=input_col,\n", + " target_col=targets[0], # TODO this should take a list of columns\n", + " embedding_type=embedding_type,\n", + " device=device,\n", + ")\n", + "\n", + "train_loader = df_to_in_mem_dataloader(\n", + " train_df,\n", + " batch_size=batch_size,\n", + " shuffle=True,\n", + " **data_loader_kwargs,\n", + ")\n", + "\n", + "val_loader = df_to_in_mem_dataloader(\n", + " test_df,\n", + " batch_size=batch_size * 16,\n", + " shuffle=False,\n", + " **data_loader_kwargs,\n", + ")\n", + "\n", + "n_targets = [\n", + " 1 if task_type == \"regression\" else train_df[target_col].max() + 1\n", + " for target_col, task_type in task_dict.items()\n", + "]\n", + "\n", + "model_params = {\n", + " \"task_dict\": task_dict,\n", + " \"robust\": robust,\n", + " \"n_targets\": n_targets,\n", + " \"n_features\": train_loader.tensors[0][0].shape[-1],\n", + " \"d_model\": 128,\n", + " \"n_attn_layers\": 6,\n", + " \"n_attn_heads\": 4,\n", + " \"trunk_hidden\": (1024, 512),\n", + " \"out_hidden\": (256, 128, 64),\n", + " \"embedding_aggregations\": (\"mean\",),\n", + "}\n", + "\n", + "train_ensemble(\n", + " model_class=Wrenformer,\n", + " model_name=model_name,\n", + " run_id=run_id,\n", + " ensemble_folds=ensemble,\n", + " epochs=epochs,\n", + " train_loader=train_loader,\n", + " val_loader=val_loader,\n", + " log=log,\n", + " setup_params=setup_params,\n", + " restart_params=restart_params,\n", + " model_params=model_params,\n", + " loss_dict=loss_dict,\n", + ")\n", + "\n", + "test_loader = df_to_in_mem_dataloader(\n", + " test_df,\n", + " batch_size=batch_size * 64,\n", + " shuffle=False,\n", + " **data_loader_kwargs,\n", + ")\n", + "\n", + "roost_results_dict = results_multitask(\n", + " model_class=Wrenformer,\n", + " model_name=model_name,\n", + " run_id=run_id,\n", + " ensemble_folds=ensemble,\n", + " test_loader=test_loader,\n", + " robust=robust,\n", + " task_dict=task_dict,\n", + " device=device,\n", + " eval_type=\"checkpoint\",\n", + " save_results=False,\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.10.8 ('py310')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.9" + }, + "vscode": { + "interpreter": { + "hash": "8022b3e932e045c760cb4633b91dd1cb8bc60d104ca9808334cbd1645adbe837" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/roost-example.py b/examples/roost-example.py index b69347b5..effd0716 100644 --- a/examples/roost-example.py +++ b/examples/roost-example.py @@ -3,6 +3,7 @@ import pandas as pd import torch from sklearn.model_selection import train_test_split as split +from torch.utils.data import DataLoader from aviary import ROOT from aviary.roost.data import CompositionData, collate_batch @@ -78,8 +79,8 @@ def main( "Cannot fine-tune and transfer checkpoint(s) at the same time." ) - task_dict = dict(zip(targets, tasks)) - loss_dict = dict(zip(targets, losses)) + task_dict = dict(zip(targets, tasks, strict=False)) + loss_dict = dict(zip(targets, losses, strict=False)) # NOTE make sure to use dense datasets, # NOTE do not use default_na as "NaN" is a valid material @@ -187,6 +188,20 @@ def main( # TODO dump all args/kwargs to a file for reproducibility. if train: + train_loader = DataLoader(train_set, **data_params) + + if val_set is not None: + val_loader = DataLoader( + val_set, + **{ + **data_params, + "batch_size": 16 * data_params["batch_size"], + "shuffle": False, + }, + ) + else: + val_loader = None + train_ensemble( model_class=Roost, model_name=model_name, @@ -194,10 +209,9 @@ def main( ensemble_folds=ensemble, epochs=epochs, patience=patience, - train_set=train_set, - val_set=val_set, + train_loader=train_loader, + val_loader=val_loader, log=log, - data_params=data_params, setup_params=setup_params, restart_params=restart_params, model_params=model_params, @@ -205,19 +219,21 @@ def main( ) if evaluate: - data_reset = { - "batch_size": 16 * batch_size, # faster model inference - "shuffle": False, # need fixed data order due to ensembling - } - data_params.update(data_reset) + test_loader = DataLoader( + test_set, + **{ + **data_params, + "batch_size": 64 * data_params["batch_size"], + "shuffle": False, + }, + ) results_multitask( model_class=Roost, model_name=model_name, run_id=run_id, ensemble_folds=ensemble, - test_set=test_set, - data_params=data_params, + test_loader=test_loader, robust=robust, task_dict=task_dict, device=device, diff --git a/examples/wren-example.py b/examples/wren-example.py index 666fe3b1..73031596 100644 --- a/examples/wren-example.py +++ b/examples/wren-example.py @@ -3,6 +3,7 @@ import pandas as pd import torch from sklearn.model_selection import train_test_split as split +from torch.utils.data import DataLoader from aviary import ROOT from aviary.utils import results_multitask, train_ensemble @@ -82,8 +83,8 @@ def main( # TODO CLI controls for loss dict. - task_dict = dict(zip(targets, tasks)) - loss_dict = dict(zip(targets, losses)) + task_dict = dict(zip(targets, tasks, strict=False)) + loss_dict = dict(zip(targets, losses, strict=False)) # NOTE make sure to use dense datasets, # NOTE do not use default_na as "NaN" is a valid material composition @@ -199,6 +200,20 @@ def main( } if train: + train_loader = DataLoader(train_set, **data_params) + + if val_set is not None: + val_loader = DataLoader( + val_set, + **{ + **data_params, + "batch_size": 16 * data_params["batch_size"], + "shuffle": False, + }, + ) + else: + val_loader = None + train_ensemble( model_class=Wren, model_name=model_name, @@ -206,10 +221,9 @@ def main( ensemble_folds=ensemble, epochs=epochs, patience=patience, - train_set=train_set, - val_set=val_set, + train_loader=train_loader, + val_loader=val_loader, log=log, - data_params=data_params, setup_params=setup_params, restart_params=restart_params, model_params=model_params, @@ -217,19 +231,21 @@ def main( ) if evaluate: - data_reset = { - "batch_size": 16 * batch_size, # faster model inference - "shuffle": False, # need fixed data order due to ensembling - } - data_params.update(data_reset) + test_loader = DataLoader( + test_set, + **{ + **data_params, + "batch_size": 64 * data_params["batch_size"], + "shuffle": False, + }, + ) results_multitask( model_class=Wren, model_name=model_name, run_id=run_id, ensemble_folds=ensemble, - test_set=test_set, - data_params=data_params, + test_loader=test_loader, robust=robust, task_dict=task_dict, device=device, diff --git a/examples/wrenformer-example.py b/examples/wrenformer-example.py new file mode 100644 index 00000000..dfa20d4c --- /dev/null +++ b/examples/wrenformer-example.py @@ -0,0 +1,419 @@ +import argparse + +import pandas as pd +import torch +from sklearn.model_selection import train_test_split as split + +from aviary.utils import results_multitask, train_ensemble +from aviary.wrenformer.data import df_to_in_mem_dataloader +from aviary.wrenformer.model import Wrenformer + + +def main( + data_path, + targets, + tasks, + losses, + robust, + model_name="wrenformer", + embedding_type="protostructure", + n_attn_layers=6, + n_attn_heads=4, + d_model=128, + ensemble=1, + run_id=1, + data_seed=42, + epochs=100, + log=False, + sample=1, + test_size=0.2, + test_path=None, + val_size=0, + val_path=None, + resume=False, + fine_tune=None, + transfer=None, + train=True, + evaluate=True, + optim="AdamW", + learning_rate=3e-4, + momentum=0.9, + weight_decay=1e-6, + batch_size=128, + workers=0, + device=None, + **kwargs, +): + """Train and evaluate a Wrenformer model.""" + if device is None: + device = "cuda" if torch.cuda.is_available() else "cpu" + print(f"The model will run on the {device} device") + + if not len(targets) == len(tasks) == len(losses): + raise AssertionError + + if not (evaluate or train): + raise AssertionError( + "No action given - At least one of 'train' or 'evaluate' cli flags required" + ) + + if test_size + val_size >= 1: + raise AssertionError( + f"'test_size'({test_size}) plus 'val_size'({val_size}) must be less than 1" + ) + + task_dict = dict(zip(targets, tasks, strict=False)) + loss_dict = dict(zip(targets, losses, strict=False)) + + # Load and preprocess data + df = pd.read_csv(data_path, keep_default_na=False, na_values=[]) + + # Split datasets + if evaluate: + if test_path: + print(f"using independent test set: {test_path}") + test_df = pd.read_csv(test_path, keep_default_na=False, na_values=[]) + else: + print(f"using {test_size} of training set as test set") + train_df, test_df = split(df, random_state=data_seed, test_size=test_size) + + if train: + if val_path: + print(f"using independent validation set: {val_path}") + val_df = pd.read_csv(val_path, keep_default_na=False, na_values=[]) + elif val_size == 0 and evaluate: + print("No validation set used, using test set for evaluation purposes") + val_df = test_df + elif val_size == 0: + val_df = None + else: + print(f"using {val_size} of training set as validation set") + test_size = val_size / (1 - test_size) + train_df, val_df = split( + train_df, random_state=data_seed, test_size=test_size + ) + + # Setup data loaders + data_loader_kwargs = dict( + id_col="material_id", + input_col="protostructure", + target_col=targets[0], + embedding_type=embedding_type, + device=device, + ) + + if train: + if sample > 1: + train_df = train_df.iloc[::sample].copy() + + train_loader = df_to_in_mem_dataloader( + train_df, + batch_size=batch_size, + shuffle=True, + **data_loader_kwargs, + ) + + val_loader = df_to_in_mem_dataloader( + val_df, + batch_size=batch_size * 16, + shuffle=False, + **data_loader_kwargs, + ) + + # Model parameters + n_targets = [ + 1 if task_type == "regression" else train_df[target_col].max() + 1 + for target_col, task_type in task_dict.items() + ] + + model_params = { + "task_dict": task_dict, + "robust": robust, + "n_targets": n_targets, + "n_features": train_loader.tensors[0][0].shape[-1], + "d_model": d_model, + "n_attn_layers": n_attn_layers, + "n_attn_heads": n_attn_heads, + "trunk_hidden": (1024, 512), + "out_hidden": (256, 128, 64), + "embedding_aggregations": ("mean",), + } + + setup_params = { + "optim": optim, + "learning_rate": learning_rate, + "weight_decay": weight_decay, + "momentum": momentum, + "device": device, + } + + restart_params = { + "resume": resume, + "fine_tune": fine_tune, + "transfer": transfer, + } + + train_ensemble( + model_class=Wrenformer, + model_name=model_name, + run_id=run_id, + ensemble_folds=ensemble, + epochs=epochs, + train_loader=train_loader, + val_loader=val_loader, + log=log, + setup_params=setup_params, + restart_params=restart_params, + model_params=model_params, + loss_dict=loss_dict, + ) + + if evaluate: + test_loader = df_to_in_mem_dataloader( + test_df, + batch_size=batch_size * 64, + shuffle=False, + **data_loader_kwargs, + ) + + results_multitask( + model_class=Wrenformer, + model_name=model_name, + run_id=run_id, + ensemble_folds=ensemble, + test_loader=test_loader, + robust=robust, + task_dict=task_dict, + device=device, + eval_type="checkpoint", + save_results=False, + ) + + +def input_parser(): + """Parse input arguments.""" + parser = argparse.ArgumentParser(description=("Wrenformer")) + + # data inputs + parser.add_argument( + "--data-path", + metavar="PATH", + help="Path to main data set/training set", + ) + valid_group = parser.add_mutually_exclusive_group() + valid_group.add_argument( + "--val-path", metavar="PATH", help="Path to independent validation set" + ) + valid_group.add_argument( + "--val-size", + default=0, + type=float, + metavar="FLOAT", + help="Proportion of data used for validation", + ) + test_group = parser.add_mutually_exclusive_group() + test_group.add_argument( + "--test-path", metavar="PATH", help="Path to independent test set" + ) + test_group.add_argument( + "--test-size", + default=0.2, + type=float, + metavar="FLOAT", + help="Proportion of data set for testing", + ) + + # data loader inputs + parser.add_argument( + "--workers", + default=0, + type=int, + metavar="INT", + help="Number of data loading workers (default: 0)", + ) + parser.add_argument( + "--batch-size", + "--bsize", + default=128, + type=int, + metavar="INT", + help="Mini-batch size (default: 128)", + ) + parser.add_argument( + "--data-seed", + default=0, + type=int, + metavar="INT", + help="Seed used when splitting data sets (default: 0)", + ) + parser.add_argument( + "--sample", + default=1, + type=int, + metavar="INT", + help="Sub-sample the training set for learning curves", + ) + + # task inputs + parser.add_argument( + "--targets", nargs="+", metavar="STR", help="Task types for targets" + ) + parser.add_argument( + "--tasks", + nargs="*", + choices=("regression", "classification"), + default=["regression"], + metavar="STR", + help="Task types for targets", + ) + parser.add_argument( + "--losses", + nargs="*", + choices=("L1", "L2", "CSE"), + default=["L1"], + metavar="STR", + help="Loss function if regression (default: 'L1')", + ) + + # optimizer inputs + parser.add_argument( + "--epochs", + default=100, + type=int, + metavar="INT", + help="Number of training epochs to run (default: 100)", + ) + parser.add_argument( + "--robust", + action="store_true", + help="Specifies whether to use heteroscedastic loss variants", + ) + parser.add_argument( + "--optim", + default="AdamW", + metavar="STR", + help="Optimizer used for training (default: 'AdamW')", + ) + parser.add_argument( + "--learning-rate", + "--lr", + default=3e-4, + type=float, + metavar="FLOAT", + help="Initial learning rate (default: 3e-4)", + ) + parser.add_argument( + "--momentum", + default=0.9, + type=float, + metavar="FLOAT [0,1]", + help="Optimizer momentum (default: 0.9)", + ) + parser.add_argument( + "--weight-decay", + default=1e-6, + type=float, + metavar="FLOAT [0,1]", + help="Optimizer weight decay (default: 1e-6)", + ) + + # ensemble inputs + parser.add_argument( + "--ensemble", + default=1, + type=int, + metavar="INT", + help="Number models to ensemble", + ) + name_group = parser.add_mutually_exclusive_group() + name_group.add_argument( + "--model-name", + default=None, + metavar="STR", + help="Name for sub-directory where models will be stored", + ) + name_group.add_argument( + "--data-id", + default="wren", + metavar="STR", + help="Partial identifier for sub-directory where models will be stored", + ) + parser.add_argument( + "--run-id", + default=0, + type=int, + metavar="INT", + help="Index for model in an ensemble of models", + ) + + # restart inputs + use_group = parser.add_mutually_exclusive_group() + use_group.add_argument( + "--fine-tune", metavar="PATH", help="Checkpoint path for fine tuning" + ) + use_group.add_argument( + "--transfer", metavar="PATH", help="Checkpoint path for transfer learning" + ) + use_group.add_argument( + "--resume", action="store_true", help="Resume from previous checkpoint" + ) + + # task type + parser.add_argument( + "--evaluate", action="store_true", help="Evaluate the model/ensemble" + ) + parser.add_argument("--train", action="store_true", help="Train the model/ensemble") + + # misc + parser.add_argument("--disable-cuda", action="store_true", help="Disable CUDA") + parser.add_argument( + "--log", action="store_true", help="Log training metrics to TensorBoard" + ) + + # model architecture inputs + parser.add_argument( + "--embedding-type", + default="protostructure", + type=str, + metavar="STR", + help="Type of embedding to use (default: 'protostructure')", + ) + parser.add_argument( + "--n-attn-layers", + default=6, + type=int, + metavar="INT", + help="Number of attention layers (default: 6)", + ) + parser.add_argument( + "--n-attn-heads", + default=4, + type=int, + metavar="INT", + help="Number of attention heads per layer (default: 4)", + ) + parser.add_argument( + "--d-model", + default=128, + type=int, + metavar="INT", + help="Dimension of model embeddings (default: 128)", + ) + + args = parser.parse_args() + + if args.model_name is None: + args.model_name = f"{args.data_id}_s-{args.data_seed}_t-{args.sample}" + + args.device = ( + torch.device("cuda") + if (not args.disable_cuda) and torch.cuda.is_available() + else torch.device("cpu") + ) + + return args + + +if __name__ == "__main__": + args = input_parser() + raise SystemExit(main(**vars(args))) diff --git a/examples/wrenformer/matbench/__init__.py b/examples/wrenformer/matbench/__init__.py deleted file mode 100644 index 37dcee7d..00000000 --- a/examples/wrenformer/matbench/__init__.py +++ /dev/null @@ -1,31 +0,0 @@ -from glob import glob -from typing import Literal - -from aviary import ROOT - -__author__ = "Janosh Riebesell" -__date__ = "2022-04-11" - - -DATA_PATHS = { - path.split("/")[-1].split(".")[0]: path - for path in glob(f"{ROOT}/datasets/matbench_*.json.bz2") -} - -assert len(DATA_PATHS) == 13, f"glob found {len(DATA_PATHS)} data sets, expected 13" - -MatbenchDatasets = Literal[ - "matbench_steels", - "matbench_jdft2d", - "matbench_phonons", - "matbench_expt_gap", - "matbench_dielectric", - "matbench_expt_is_metal", - "matbench_glass", - "matbench_log_gvrh", - "matbench_log_kvrh", - "matbench_perovskites", - "matbench_mp_gap", - "matbench_mp_is_metal", - "matbench_mp_e_form", -] diff --git a/examples/wrenformer/matbench/compare_spglib_vs_aflow_wyckoff_labels.py b/examples/wrenformer/matbench/compare_spglib_vs_aflow_wyckoff_labels.py deleted file mode 100644 index 471c94df..00000000 --- a/examples/wrenformer/matbench/compare_spglib_vs_aflow_wyckoff_labels.py +++ /dev/null @@ -1,119 +0,0 @@ -# %% -import os - -import pandas as pd -import pymatviz as pmv -from matminer.datasets import load_dataset -from pymatgen.analysis.prototypes import ( - get_protostructure_label_from_aflow, - get_protostructure_label_from_spglib, -) -from pymatgen.core import Structure -from pymatgen.symmetry.analyzer import SpacegroupAnalyzer -from tqdm import tqdm - -from aviary import ROOT -from examples.wrenformer.matbench import DATA_PATHS - -__author__ = "Janosh Riebesell" -__date__ = "2022-05-17" - -""" -This notebook compares the output of Aflow and Spglib algorithms for assigning crystal -symmetries and Wyckoff position to crystal structures. Aflow is much slower but believed -to be more accurate. Materials Project uses Spglib so our spacegroups should be -identical to theirs. CCSD has their own algorithm and we found both Aflow and Spglib -occasionally disagree with their results. -""" - -MODULE_DIR = os.path.dirname(__file__) - - -# %% -df_perov = pd.read_json(DATA_PATHS["matbench_perovskites"]).set_index("mbid") -df_perov = df_perov.rename(columns={"wyckoff": "spglib_wyckoff"}) -df_perov["structure"] = df_perov.structure.map(Structure.from_dict) - - -# %% -# takes ~6h (when running uninterrupted) -for idx, struct in tqdm(df_perov.structure.items(), total=len(df_perov)): - if pd.isna(df_perov.aflow_wyckoff[idx]): - df_perov.loc[idx, "aflow_wyckoff"] = get_protostructure_label_from_aflow( - struct, "/Users/janosh/bin/aflow" - ) - - -# %% -# takes ~30 sec -for struct in tqdm(df_perov.structure, total=len(df_perov)): - get_protostructure_label_from_spglib(struct) - - -# %% -df_perov.dropna().query("wyckoff != aflow_wyckoff") - - -# %% -print( - "Percentage of materials with spglib label != aflow label: " - f"{len(df_perov.query('wyckoff != aflow_wyckoff')) / len(df_perov):.0%}" -) - - -# %% -df_perov.drop("structure", axis=1).to_csv( - f"{ROOT}/datasets/matbench_perovskites_protostructure_labels.csv" -) - - -# %% -df_perov = pd.read_csv( - f"{ROOT}/datasets/matbench_perovskites_protostructure_labels.csv" -).set_index("mbid") - - -# %% -for src in ("aflow", "spglib"): - df_perov[f"{src}_spg_num"] = ( - df_perov[f"{src}_wyckoff"].str.split("_").str[2].astype(int) - ) - - -# %% -fig = pmv.spacegroup_sunburst(df_perov.spglib_spg) -fig.update_layout(title=dict(text="Spglib Spacegroups", x=0.5, y=0.93)) -# fig.write_image(f"{MODULE_DIR}/plots/matbench_perovskites_aflow_sunburst.pdf") - - -# %% -fig = pmv.spacegroup_sunburst(df_perov.aflow_spg, title="Aflow") -fig.update_layout(title=dict(text="Aflow Spacegroups", x=0.5, y=0.85)) -# fig.write_image(f"{MODULE_DIR}/plots/matbench_perovskites_spglib_sunburst.pdf") - - -# %% -df_perov = load_dataset("matbench_perovskites") - -df_perov["spglib_spg_num"] = df_perov.structure.map( - lambda struct: SpacegroupAnalyzer(struct).get_space_group_number() -) - - -# %% -for src in ("aflow", "spglib"): - df_perov[f"{src}_crys_sys"] = df_perov[f"{src}_spg_num"].map( - pmv.utils.crystal_sys_from_spg_num - ) - - -# %% -fig = pmv.sankey_from_2_df_cols(df_perov, ["aflow_spg_num", "spglib_spg_num"]) - -fig.update_layout(title="Matbench Perovskites Aflow vs Spglib Spacegroups") - - -# %% -fig = pmv.sankey_from_2_df_cols(df_perov, ["aflow_crys_sys", "spglib_crys_sys"]) - -fig.update_layout(title="Aflow vs Spglib Crystal Systems") diff --git a/examples/wrenformer/matbench/save_matbench_aflow_labels.py b/examples/wrenformer/matbench/save_matbench_aflow_labels.py deleted file mode 100644 index a0b4c128..00000000 --- a/examples/wrenformer/matbench/save_matbench_aflow_labels.py +++ /dev/null @@ -1,39 +0,0 @@ -import pandas as pd -from pymatgen.analysis.prototypes import get_protostructure_label_from_spglib -from tqdm import tqdm - -from aviary import ROOT -from matbench import MatbenchBenchmark - -__author__ = "Janosh Riebesell" -__date__ = "2022-04-11" - - -""" -This file uses Spglib to generate Aflow Wyckoff labels for all Matbench datasets and -stores them to disk in the datasets/ folder as Bzip2-compressed JSON files. -""" - - -benchmark = MatbenchBenchmark() - -for idx, task in enumerate(benchmark.tasks, start=1): - print(f"\n\n{idx}/{len(benchmark.tasks)}") - task.load() - df: pd.DataFrame = task.df - - if "structure" in df: - df["composition"] = [struct.formula for struct in df.structure] - df["wyckoff"] = [ - get_protostructure_label_from_spglib(struct) - for struct in tqdm(df.structure, desc="Getting Aflow Wyckoff labels") - ] - elif "composition" in df: - df["composition"] = [comp.formula for comp in df.composition] - else: - raise ValueError("No structure or composition column found") - - df.to_json( - f"{ROOT}/datasets/{task.dataset_name}.json.bz2", - default_handler=lambda x: x.as_dict(), - ) diff --git a/examples/wrenformer/matbench/utils.py b/examples/wrenformer/matbench/utils.py deleted file mode 100644 index 85d37420..00000000 --- a/examples/wrenformer/matbench/utils.py +++ /dev/null @@ -1,58 +0,0 @@ -from __future__ import annotations - -import json -from typing import Literal - -__author__ = "Janosh Riebesell" -__date__ = "2022-05-10" - - -def _int_keys(dct: dict) -> dict: - # JSON stringifies all dict keys during serialization and does not revert - # back to floats and ints during parsing. This json.load() hook converts keys - # containing only digits to ints. - return {int(k) if k.lstrip("-").isdigit() else k: v for k, v in dct.items()} - - -def recursive_dict_merge(dict1: dict, dict2: dict) -> dict: - """Merge two dicts recursively.""" - for key, val2 in dict2.items(): - if key in dict1 and isinstance(dict1[key], dict) and isinstance(val2, dict): - recursive_dict_merge(dict1[key], val2) - else: - dict1[key] = val2 - return dict1 - - -def merge_json_on_disk( - dct: dict, - file_path: str, - on_non_serializable: Literal["annotate", "error"] = "annotate", -) -> None: - """Merge a dict into a (possibly) existing JSON file. - - Args: - file_path (str): Path to JSON file. File will be created if not exist. - dct (dict): Dictionary to merge into JSON file. - on_non_serializable ('annotate' | 'error'): What to do with non-serializable - values encountered in dct. 'annotate' will replace the offending object with - a string indicating the type, e.g. ''. 'error' - will raise 'TypeError: Object of type function is not JSON serializable'. - Defaults to 'annotate'. - """ - try: - with open(file_path) as json_file: - data = json.load(json_file, object_hook=_int_keys) - - dct = recursive_dict_merge(data, dct) - except (FileNotFoundError, json.decoder.JSONDecodeError): # file missing or empty - pass - - def non_serializable_handler(obj: object) -> str: - # replace functions and classes in dct with string indicating it's a - # non-serializable type - return f"" - - with open(file_path, "w") as file: - default = non_serializable_handler if on_non_serializable == "annotate" else None - json.dump(dct, file, default=default, indent=2) diff --git a/examples/wrenformer/mp_wbm/__init__.py b/examples/wrenformer/mp_wbm/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/examples/wrenformer/mp_wbm/test_wrenformer.py b/examples/wrenformer/mp_wbm/test_wrenformer.py deleted file mode 100644 index eeb2d247..00000000 --- a/examples/wrenformer/mp_wbm/test_wrenformer.py +++ /dev/null @@ -1,70 +0,0 @@ -from __future__ import annotations - -import os -from datetime import datetime - -import pandas as pd -import wandb - -from aviary import ROOT -from aviary.predict import predict_from_wandb_checkpoints -from aviary.wrenformer.data import df_to_in_mem_dataloader -from aviary.wrenformer.model import Wrenformer - -__author__ = "Janosh Riebesell" -__date__ = "2022-06-23" - -""" -Script that downloads checkpoints for an ensemble of Wrenformer models trained on -the MP+WBM formation energies and makes predictions on the test set, then prints -ensemble metrics and stores predictions to CSV. -""" - -module_dir = os.path.dirname(__file__) -today = f"{datetime.now():%Y-%m-%d}" -data_path = f"{ROOT}/datasets/2022-06-09-mp+wbm.json.gz" -# data_path = f"{ROOT}/datasets/2022-06-09-mp+wbm-1k-samples.json.gz" -test_size = 0.05 -df = pd.read_json(data_path) -# shuffle with same random seed as in train_wrenformer() to get same train/test split -df = df.sample(frac=1, random_state=0) -train_df = df.sample(frac=1 - test_size, random_state=0) # unused -test_df = df.drop(train_df.index) -target_col = "e_form" - -ensemble_id = "ensemble-id-2" -runs = wandb.Api().runs("aviary/mp-wbm", filters={"tags": {"$in": [ensemble_id]}}) - -assert len(runs) == 10, f"Expected 10 runs, got {len(runs)} for {ensemble_id=}" - -data_loader = df_to_in_mem_dataloader( - df=df, - target_col=target_col, - batch_size=1024, - input_col="wyckoff", - embedding_type="wyckoff", - shuffle=False, # False is default but best be explicit -) - -test_df, ensemble_metrics = predict_from_wandb_checkpoints( - runs, - data_loader=data_loader, - df=test_df, - target_col=target_col, - model_cls=Wrenformer, -) - -test_df.round(6).to_csv(f"{module_dir}/{today}-{ensemble_id}-preds-{target_col}.csv") - -# print output: -# Predicting with 10 model checkpoint(s) -# -# Single model performance: -# MAE RMSE R2 -# mean 0.0369 0.1218 0.9864 -# std 0.0005 0.0014 0.0003 -# -# Ensemble performance: -# MAE 0.0308 -# RMSE 0.118 -# R2 0.987 diff --git a/examples/wrenformer/mp_wbm/train_wrenformer.py b/examples/wrenformer/mp_wbm/train_wrenformer.py deleted file mode 100644 index 1a7abe72..00000000 --- a/examples/wrenformer/mp_wbm/train_wrenformer.py +++ /dev/null @@ -1,79 +0,0 @@ -# %% -import os -from datetime import datetime - -import pandas as pd -from matbench_discovery.slurm import slurm_submit - -from aviary import ROOT -from aviary.train import df_train_test_split, train_wrenformer - -""" -Train a Wrenformer ensemble of size n_folds on target_col of data_path. -""" - -__author__ = "Janosh Riebesell" -__date__ = "2022-06-13" - - -# %% -epochs = 30 -target_col = "e_form" -input_col = "wyckoff" -run_name = f"wrenformer-robust-mp+wbm-{epochs=}-{target_col}" -n_folds = 10 -timestamp = f"{datetime.now():%Y-%m-%d@%H-%M-%S}" -today = timestamp.split("@")[0] -log_dir = f"{os.path.dirname(__file__)}/{today}-{run_name}" - -slurm_submit( - job_name=run_name, - partition="ampere", - account="LEE-SL3-GPU", - time="1:0:0", - array=f"1-{n_folds}", - log_dir=log_dir, - slurm_flags=("--nodes", "1", "--gpus-per-node", "1"), - # prepend into sbatch script to source module command and load default env - # for Ampere GPU partition before actual job command - pre_cmd=". /etc/profile.d/modules.sh; module load rhel8/default-amp;", -) - - -# %% -learning_rate = 3e-4 -# data_path = f"{ROOT}/datasets/2022-06-09-mp+wbm.json.gz" -# for faster testing/debugging -data_path = f"{ROOT}/datasets/2022-06-09-mp+wbm-1k-samples.json.gz" -batch_size = 128 -slurm_array_task_id = int(os.getenv("SLURM_ARRAY_TASK_ID", "0")) - -print(f"Job started running {timestamp}") -print(f"{run_name=}") -print(f"{data_path=}") - -df = pd.read_json(data_path).set_index("material_id", drop=False) -assert target_col in df, f"{target_col=} not in {list(df)}" -assert input_col in df, f"{input_col=} not in {list(df)}" -train_df, test_df = df_train_test_split(df, test_size=0.3) - -run_params = dict( - batch_size=batch_size, - train_df=dict(shape=str(train_df.shape), columns=", ".join(train_df)), - test_df=dict(shape=str(test_df.shape), columns=", ".join(test_df)), -) - -train_wrenformer( - run_name=run_name, - train_df=train_df, - test_df=test_df, - target_col=target_col, - task_type="regression", - timestamp=timestamp, - epochs=epochs, - checkpoint="wandb", # None | 'local' | 'wandb', - learning_rate=learning_rate, - batch_size=batch_size, - wandb_path="aviary/mp-wbm", - run_params=run_params, -) diff --git a/pyproject.toml b/pyproject.toml index 1ca75735..96a75b8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,13 +27,12 @@ classifiers = [ "Operating System :: OS Independent", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.9", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Chemistry", "Topic :: Scientific/Engineering :: Physics", ] -requires-python = ">=3.9" +requires-python = ">=3.10" dependencies = [ "numpy>=2,<3", "pandas", @@ -42,6 +41,7 @@ dependencies = [ "tensorboard", "torch>=2.3.0", "tqdm", + "typing-extensions", "wandb", ] @@ -70,7 +70,7 @@ no_implicit_optional = false [tool.ruff] line-length = 90 -target-version = "py39" +target-version = "py310" output-format = "concise" [tool.ruff.lint] diff --git a/tests/conftest.py b/tests/conftest.py index ffeac5af..539ef454 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,9 +5,6 @@ from matminer.datasets import load_dataset from pymatgen.analysis.prototypes import get_protostructure_label_from_spglib -__author__ = "Janosh Riebesell" -__date__ = "2022-04-09" - torch.manual_seed(0) # ensure reproducible results (applies to all tests) TEST_DIR = os.path.dirname(os.path.abspath(__file__)) @@ -36,7 +33,7 @@ def df_matbench_jdft2d(): df = df.set_index("material_id", drop=False) df["composition"] = [x.composition.formula.replace(" ", "") for x in df.structure] - df["wyckoff"] = df.structure.map(get_protostructure_label_from_spglib) + df["protostructure"] = df.structure.map(get_protostructure_label_from_spglib) return df @@ -46,7 +43,7 @@ def df_matbench_phonons_wyckoff(df_matbench_phonons): """Getting Aflow labels is expensive so we split into a separate fixture to avoid paying for it unless requested. """ - df_matbench_phonons["wyckoff"] = df_matbench_phonons.structure.map( + df_matbench_phonons["protostructure"] = df_matbench_phonons.structure.map( get_protostructure_label_from_spglib ) diff --git a/tests/test_cgcnn.py b/tests/test_cgcnn.py new file mode 100644 index 00000000..e79d2fb6 --- /dev/null +++ b/tests/test_cgcnn.py @@ -0,0 +1,287 @@ +import numpy as np +import pytest +import torch +from sklearn.model_selection import train_test_split as split +from torch.utils.data import DataLoader + +from aviary.cgcnn.data import CrystalGraphData, collate_batch +from aviary.cgcnn.model import CrystalGraphConvNet +from aviary.utils import get_metrics, results_multitask, train_ensemble + + +@pytest.fixture +def base_config(): + return { + "elem_embedding": "cgcnn92", + "robust": True, + "ensemble": 2, + "run_id": 1, + "data_seed": 42, + "log": False, + "sample": 1, + "test_size": 0.2, + } + + +@pytest.fixture +def model_architecture(): + return { + "elem_fea_len": 32, + "h_fea_len": 128, + "n_graph": 3, + "n_hidden": 1, + } + + +@pytest.fixture +def training_config(): + return { + "resume": False, + "fine_tune": None, + "transfer": None, + "optim": "AdamW", + "learning_rate": 3e-4, + "momentum": 0.9, + "weight_decay": 1e-6, + "batch_size": 128, + "workers": 0, + "device": "cuda" if torch.cuda.is_available() else "cpu", + } + + +def test_cgcnn_regression( + df_matbench_phonons, base_config, model_architecture, training_config +): + target_name = "last phdos peak" + task = "regression" + losses = ["L1"] + epochs = 25 + model_name = "cgcnn-reg-test" + + task_dict = dict(zip([target_name], [task], strict=False)) + loss_dict = dict(zip([target_name], losses, strict=False)) + + dataset = CrystalGraphData( + df=df_matbench_phonons, + elem_embedding=base_config["elem_embedding"], + task_dict=task_dict, + ) + n_targets = dataset.n_targets + elem_emb_len = dataset.elem_emb_len + nbr_fea_len = dataset.nbr_fea_dim + + train_idx = list(range(len(dataset))) + train_idx, test_idx = split( + train_idx, + random_state=base_config["data_seed"], + test_size=base_config["test_size"], + ) + test_set = torch.utils.data.Subset(dataset, test_idx) + val_set = test_set + train_set = torch.utils.data.Subset(dataset, train_idx[0 :: base_config["sample"]]) + + data_params = { + "batch_size": training_config["batch_size"], + "num_workers": training_config["workers"], + "pin_memory": False, + "shuffle": True, + "collate_fn": collate_batch, + } + + train_loader = DataLoader(train_set, **data_params) + val_loader = DataLoader( + val_set, + **{**data_params, "batch_size": 16 * data_params["batch_size"], "shuffle": False}, + ) + + setup_params = { + "optim": training_config["optim"], + "learning_rate": training_config["learning_rate"], + "weight_decay": training_config["weight_decay"], + "momentum": training_config["momentum"], + "device": training_config["device"], + } + + restart_params = { + "resume": training_config["resume"], + "fine_tune": training_config["fine_tune"], + "transfer": training_config["transfer"], + } + + model_params = { + "task_dict": task_dict, + "robust": base_config["robust"], + "n_targets": n_targets, + "elem_emb_len": elem_emb_len, + "nbr_fea_len": nbr_fea_len, + **model_architecture, + } + + train_ensemble( + model_class=CrystalGraphConvNet, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + epochs=epochs, + train_loader=train_loader, + val_loader=val_loader, + log=base_config["log"], + setup_params=setup_params, + restart_params=restart_params, + model_params=model_params, + loss_dict=loss_dict, + ) + + test_loader = DataLoader( + test_set, + **{**data_params, "batch_size": 64 * data_params["batch_size"], "shuffle": False}, + ) + + results_dict = results_multitask( + model_class=CrystalGraphConvNet, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + test_loader=test_loader, + robust=base_config["robust"], + task_dict=task_dict, + device=training_config["device"], + eval_type="checkpoint", + save_results=False, + ) + + preds = results_dict[target_name]["preds"] + targets = results_dict[target_name]["targets"] + + y_ens = np.mean(preds, axis=0) + mae, rmse, r2 = get_metrics(targets, y_ens, task).values() + + assert len(targets) == len(test_set) == len(test_idx) + assert r2 > 0.7 + assert mae < 150 + assert rmse < 300 + + +def test_cgcnn_clf(df_matbench_phonons, base_config, model_architecture, training_config): + targets = ["phdos_clf"] + task = "classification" + losses = ["CSE"] + epochs = 10 + model_name = "cgcnn-clf-test" + + task_dict = dict(zip(targets, [task], strict=False)) + loss_dict = dict(zip(targets, losses, strict=False)) + + dataset = CrystalGraphData( + df=df_matbench_phonons, + elem_embedding=base_config["elem_embedding"], + task_dict=task_dict, + ) + n_targets = dataset.n_targets + elem_emb_len = dataset.elem_emb_len + nbr_fea_len = dataset.nbr_fea_dim + + train_idx = list(range(len(dataset))) + + print(f"using {base_config['test_size']} of training set as test set") + train_idx, test_idx = split( + train_idx, + random_state=base_config["data_seed"], + test_size=base_config["test_size"], + ) + test_set = torch.utils.data.Subset(dataset, test_idx) + + print("No validation set used, using test set for evaluation purposes") + # NOTE that when using this option care must be taken not to + # peak at the test-set. The only valid model to use is the one + # obtained after the final epoch where the epoch count is + # decided in advance of the experiment. + val_set = test_set + + train_set = torch.utils.data.Subset(dataset, train_idx[0 :: base_config["sample"]]) + + data_params = { + "batch_size": training_config["batch_size"], + "num_workers": training_config["workers"], + "pin_memory": False, + "shuffle": True, + "collate_fn": collate_batch, + } + + train_loader = DataLoader(train_set, **data_params) + val_loader = DataLoader( + val_set, + **{**data_params, "batch_size": 16 * data_params["batch_size"], "shuffle": False}, + ) + + setup_params = { + "optim": training_config["optim"], + "learning_rate": training_config["learning_rate"], + "weight_decay": training_config["weight_decay"], + "momentum": training_config["momentum"], + "device": training_config["device"], + } + + restart_params = { + "resume": training_config["resume"], + "fine_tune": training_config["fine_tune"], + "transfer": training_config["transfer"], + } + + model_params = { + "task_dict": task_dict, + "robust": base_config["robust"], + "n_targets": n_targets, + "elem_emb_len": elem_emb_len, + "nbr_fea_len": nbr_fea_len, + **model_architecture, + } + + train_ensemble( + model_class=CrystalGraphConvNet, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + epochs=epochs, + train_loader=train_loader, + val_loader=val_loader, + log=base_config["log"], + setup_params=setup_params, + restart_params=restart_params, + model_params=model_params, + loss_dict=loss_dict, + ) + + test_loader = DataLoader( + test_set, + **{**data_params, "batch_size": 64 * data_params["batch_size"], "shuffle": False}, + ) + + results_dict = results_multitask( + model_class=CrystalGraphConvNet, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + test_loader=test_loader, + robust=base_config["robust"], + task_dict=task_dict, + device=training_config["device"], + eval_type="checkpoint", + save_results=False, + ) + + logits = results_dict["phdos_clf"]["logits"] + targets = results_dict["phdos_clf"]["targets"] + + # calculate metrics and errors with associated errors for ensembles + ens_logits = np.mean(logits, axis=0) + + ens_acc, *_, ens_roc_auc = get_metrics(targets, ens_logits, task).values() + + assert len(targets) == len(test_set) == len(test_idx) + assert ens_acc > 0.85 + assert ens_roc_auc > 0.9 + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/test_cgcnn_classification.py b/tests/test_cgcnn_classification.py deleted file mode 100644 index 0c8d10cb..00000000 --- a/tests/test_cgcnn_classification.py +++ /dev/null @@ -1,141 +0,0 @@ -import numpy as np -import torch -from sklearn.model_selection import train_test_split as split - -from aviary.cgcnn.data import CrystalGraphData, collate_batch -from aviary.cgcnn.model import CrystalGraphConvNet -from aviary.utils import get_metrics, results_multitask, train_ensemble - - -def test_cgcnn_clf(df_matbench_phonons): - elem_embedding = "cgcnn92" - targets = ["phdos_clf"] - task = "classification" - losses = ["CSE"] - robust = True - model_name = "cgcnn-clf-test" - elem_fea_len = 32 - h_fea_len = 128 - n_graph = 3 - n_hidden = 1 - ensemble = 2 - run_id = 1 - data_seed = 42 - epochs = 10 - log = False - sample = 1 - test_size = 0.2 - resume = False - fine_tune = None - transfer = None - optim = "AdamW" - learning_rate = 3e-4 - momentum = 0.9 - weight_decay = 1e-6 - batch_size = 128 - workers = 0 - device = "cuda" if torch.cuda.is_available() else "cpu" - - task_dict = dict(zip(targets, [task])) - loss_dict = dict(zip(targets, losses)) - - dataset = CrystalGraphData( - df=df_matbench_phonons, elem_embedding=elem_embedding, task_dict=task_dict - ) - n_targets = dataset.n_targets - elem_emb_len = dataset.elem_emb_len - nbr_fea_len = dataset.nbr_fea_dim - - train_idx = list(range(len(dataset))) - - print(f"using {test_size} of training set as test set") - train_idx, test_idx = split(train_idx, random_state=data_seed, test_size=test_size) - test_set = torch.utils.data.Subset(dataset, test_idx) - - print("No validation set used, using test set for evaluation purposes") - # NOTE that when using this option care must be taken not to - # peak at the test-set. The only valid model to use is the one - # obtained after the final epoch where the epoch count is - # decided in advance of the experiment. - val_set = test_set - - train_set = torch.utils.data.Subset(dataset, train_idx[0::sample]) - - data_params = { - "batch_size": batch_size, - "num_workers": workers, - "pin_memory": False, - "shuffle": True, - "collate_fn": collate_batch, - } - - setup_params = { - "optim": optim, - "learning_rate": learning_rate, - "weight_decay": weight_decay, - "momentum": momentum, - "device": device, - } - - restart_params = { - "resume": resume, - "fine_tune": fine_tune, - "transfer": transfer, - } - - model_params = { - "task_dict": task_dict, - "robust": robust, - "n_targets": n_targets, - "elem_emb_len": elem_emb_len, - "nbr_fea_len": nbr_fea_len, - "elem_fea_len": elem_fea_len, - "n_graph": n_graph, - "h_fea_len": h_fea_len, - "n_hidden": n_hidden, - } - - train_ensemble( - model_class=CrystalGraphConvNet, - model_name=model_name, - run_id=run_id, - ensemble_folds=ensemble, - epochs=epochs, - train_set=train_set, - val_set=val_set, - log=log, - data_params=data_params, - setup_params=setup_params, - restart_params=restart_params, - model_params=model_params, - loss_dict=loss_dict, - ) - - data_params["batch_size"] = 64 * batch_size # faster model inference - data_params["shuffle"] = False # need fixed data order due to ensembling - - results_dict = results_multitask( - model_class=CrystalGraphConvNet, - model_name=model_name, - run_id=run_id, - ensemble_folds=ensemble, - test_set=test_set, - data_params=data_params, - robust=robust, - task_dict=task_dict, - device=device, - eval_type="checkpoint", - save_results=False, - ) - - logits = results_dict["phdos_clf"]["logits"] - targets = results_dict["phdos_clf"]["targets"] - - # calculate metrics and errors with associated errors for ensembles - ens_logits = np.mean(logits, axis=0) - - ens_acc, *_, ens_roc_auc = get_metrics(targets, ens_logits, task).values() - - assert len(targets) == len(test_set) == len(test_idx) - assert ens_acc > 0.85 - assert ens_roc_auc > 0.9 diff --git a/tests/test_cgcnn_regression.py b/tests/test_cgcnn_regression.py deleted file mode 100644 index f6c908c6..00000000 --- a/tests/test_cgcnn_regression.py +++ /dev/null @@ -1,141 +0,0 @@ -import numpy as np -import torch -from sklearn.model_selection import train_test_split as split - -from aviary.cgcnn.data import CrystalGraphData, collate_batch -from aviary.cgcnn.model import CrystalGraphConvNet -from aviary.utils import get_metrics, results_multitask, train_ensemble - - -def test_cgcnn_regression(df_matbench_phonons): - elem_embedding = "cgcnn92" - target_name = "last phdos peak" - task = "regression" - losses = ["L1"] - robust = True - model_name = "cgcnn-reg-test" - elem_fea_len = 32 - h_fea_len = 128 - n_graph = 3 - n_hidden = 1 - ensemble = 2 - run_id = 1 - data_seed = 42 - epochs = 25 - log = False - sample = 1 - test_size = 0.2 - resume = False - fine_tune = None - transfer = None - optim = "AdamW" - learning_rate = 3e-4 - momentum = 0.9 - weight_decay = 1e-6 - batch_size = 128 - workers = 0 - device = "cuda" if torch.cuda.is_available() else "cpu" - - task_dict = dict(zip([target_name], [task])) - loss_dict = dict(zip([target_name], losses)) - - dataset = CrystalGraphData( - df=df_matbench_phonons, elem_embedding=elem_embedding, task_dict=task_dict - ) - n_targets = dataset.n_targets - elem_emb_len = dataset.elem_emb_len - nbr_fea_len = dataset.nbr_fea_dim - - train_idx = list(range(len(dataset))) - - print(f"using {test_size} of training set as test set") - train_idx, test_idx = split(train_idx, random_state=data_seed, test_size=test_size) - test_set = torch.utils.data.Subset(dataset, test_idx) - - print("No validation set used, using test set for evaluation purposes") - # NOTE that when using this option care must be taken not to - # peak at the test-set. The only valid model to use is the one - # obtained after the final epoch where the epoch count is - # decided in advance of the experiment. - val_set = test_set - - train_set = torch.utils.data.Subset(dataset, train_idx[0::sample]) - - data_params = { - "batch_size": batch_size, - "num_workers": workers, - "pin_memory": False, - "shuffle": True, - "collate_fn": collate_batch, - } - - setup_params = { - "optim": optim, - "learning_rate": learning_rate, - "weight_decay": weight_decay, - "momentum": momentum, - "device": device, - } - - restart_params = { - "resume": resume, - "fine_tune": fine_tune, - "transfer": transfer, - } - - model_params = { - "task_dict": task_dict, - "robust": robust, - "n_targets": n_targets, - "elem_emb_len": elem_emb_len, - "nbr_fea_len": nbr_fea_len, - "elem_fea_len": elem_fea_len, - "n_graph": n_graph, - "h_fea_len": h_fea_len, - "n_hidden": n_hidden, - } - - train_ensemble( - model_class=CrystalGraphConvNet, - model_name=model_name, - run_id=run_id, - ensemble_folds=ensemble, - epochs=epochs, - train_set=train_set, - val_set=val_set, - log=log, - data_params=data_params, - setup_params=setup_params, - restart_params=restart_params, - model_params=model_params, - loss_dict=loss_dict, - ) - - data_params["batch_size"] = 64 * batch_size # faster model inference - data_params["shuffle"] = False # need fixed data order due to ensembling - - results_dict = results_multitask( - model_class=CrystalGraphConvNet, - model_name=model_name, - run_id=run_id, - ensemble_folds=ensemble, - test_set=test_set, - data_params=data_params, - robust=robust, - task_dict=task_dict, - device=device, - eval_type="checkpoint", - save_results=False, - ) - - preds = results_dict[target_name]["preds"] - targets = results_dict[target_name]["targets"] - - y_ens = np.mean(preds, axis=0) - - mae, rmse, r2 = get_metrics(targets, y_ens, task).values() - - assert len(targets) == len(test_set) == len(test_idx) - assert r2 > 0.7 - assert mae < 150 - assert rmse < 300 diff --git a/tests/test_core.py b/tests/test_core.py index 5ca57eb0..3e77fc0e 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -57,7 +57,7 @@ def test_masked_std(): # test against explicit calculation rand_floats = torch.rand(3, 4, 5) rand_masks = torch.randint(0, 2, (3, 4, 5)).bool() - for xi, mask in zip(rand_floats, rand_masks): + for xi, mask in zip(rand_floats, rand_masks, strict=False): for dim in (0, 1): out = masked_std(xi, mask, dim=dim) xi_nan = torch.where(mask, xi, torch.tensor(float("nan"))) diff --git a/tests/test_package.py b/tests/test_package.py index 83e9f1b7..c1fce2ca 100644 --- a/tests/test_package.py +++ b/tests/test_package.py @@ -8,10 +8,6 @@ package_sources_path = f"{ROOT}/aviary.egg-info/SOURCES.txt" -__author__ = "Janosh Riebesell" -__date__ = "2022-05-25" - - @pytest.mark.skipif( not os.path.isfile(package_sources_path), reason="No aviary.egg-info/SOURCES.txt file, run pip install . to create it", diff --git a/tests/test_roost.py b/tests/test_roost.py new file mode 100644 index 00000000..7ff74ec4 --- /dev/null +++ b/tests/test_roost.py @@ -0,0 +1,283 @@ +import numpy as np +import pytest +import torch +from sklearn.model_selection import train_test_split as split +from torch.utils.data import DataLoader + +from aviary.roost.data import CompositionData, collate_batch +from aviary.roost.model import Roost +from aviary.utils import get_metrics, results_multitask, train_ensemble + + +@pytest.fixture +def base_config(): + return { + "elem_embedding": "matscholar200", + "robust": True, + "ensemble": 2, + "run_id": 1, + "data_seed": 42, + "log": False, + "sample": 1, + "test_size": 0.2, + } + + +@pytest.fixture +def model_architecture(): + return { + "elem_fea_len": 64, + "n_graph": 3, + "elem_heads": 2, + "elem_gate": [256], + "elem_msg": [256], + "cry_heads": 2, + "cry_gate": [256], + "cry_msg": [256], + "trunk_hidden": [256, 256], + "out_hidden": [128, 64], + } + + +@pytest.fixture +def training_config(): + return { + "resume": False, + "fine_tune": None, + "transfer": None, + "optim": "AdamW", + "learning_rate": 3e-4, + "momentum": 0.9, + "weight_decay": 1e-6, + "batch_size": 128, + "workers": 0, + "device": "cuda" if torch.cuda.is_available() else "cpu", + } + + +def test_roost_regression( + df_matbench_phonons, base_config, model_architecture, training_config +): + target_name = "last phdos peak" + task = "regression" + losses = ["L1"] + epochs = 25 + model_name = "roost-reg-test" + + task_dict = dict(zip([target_name], [task], strict=False)) + loss_dict = dict(zip([target_name], losses, strict=False)) + + dataset = CompositionData( + df=df_matbench_phonons, + elem_embedding=base_config["elem_embedding"], + task_dict=task_dict, + ) + n_targets = dataset.n_targets + elem_emb_len = dataset.elem_emb_len + + train_idx = list(range(len(dataset))) + train_idx, test_idx = split( + train_idx, + random_state=base_config["data_seed"], + test_size=base_config["test_size"], + ) + test_set = torch.utils.data.Subset(dataset, test_idx) + val_set = test_set + train_set = torch.utils.data.Subset(dataset, train_idx[0 :: base_config["sample"]]) + + data_params = { + "batch_size": training_config["batch_size"], + "num_workers": training_config["workers"], + "pin_memory": False, + "shuffle": True, + "collate_fn": collate_batch, + } + + setup_params = { + "optim": training_config["optim"], + "learning_rate": training_config["learning_rate"], + "weight_decay": training_config["weight_decay"], + "momentum": training_config["momentum"], + "device": training_config["device"], + } + + restart_params = { + "resume": training_config["resume"], + "fine_tune": training_config["fine_tune"], + "transfer": training_config["transfer"], + } + + model_params = { + "task_dict": task_dict, + "robust": base_config["robust"], + "n_targets": n_targets, + "elem_emb_len": elem_emb_len, + **model_architecture, # unpack all model architecture parameters + } + + train_loader = DataLoader(train_set, **data_params) + val_loader = DataLoader( + val_set, + **{**data_params, "batch_size": 16 * data_params["batch_size"], "shuffle": False}, + ) + + train_ensemble( + model_class=Roost, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + epochs=epochs, + train_loader=train_loader, + val_loader=val_loader, + log=base_config["log"], + setup_params=setup_params, + restart_params=restart_params, + model_params=model_params, + loss_dict=loss_dict, + ) + + test_loader = DataLoader( + test_set, + **{**data_params, "batch_size": 64 * data_params["batch_size"], "shuffle": False}, + ) + + results_dict = results_multitask( + model_class=Roost, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + test_loader=test_loader, + robust=base_config["robust"], + task_dict=task_dict, + device=training_config["device"], + eval_type="checkpoint", + save_results=False, + ) + + preds = results_dict[target_name]["preds"] + targets = results_dict[target_name]["targets"] + + y_ens = np.mean(preds, axis=0) + + mae, rmse, r2 = get_metrics(targets, y_ens, task).values() + + assert len(targets) == len(test_set) == len(test_idx) + assert r2 > 0.7 + assert mae < 150 + assert rmse < 300 + + +def test_roost_clf(df_matbench_phonons, base_config, model_architecture, training_config): + targets = ["phdos_clf"] + task = "classification" + losses = ["CSE"] + epochs = 15 + model_name = "roost-clf-test" + + task_dict = dict(zip(targets, [task], strict=False)) + loss_dict = dict(zip(targets, losses, strict=False)) + + dataset = CompositionData( + df=df_matbench_phonons, + elem_embedding=base_config["elem_embedding"], + task_dict=task_dict, + ) + n_targets = dataset.n_targets + elem_emb_len = dataset.elem_emb_len + + train_idx = list(range(len(dataset))) + train_idx, test_idx = split( + train_idx, + random_state=base_config["data_seed"], + test_size=base_config["test_size"], + ) + test_set = torch.utils.data.Subset(dataset, test_idx) + val_set = test_set + train_set = torch.utils.data.Subset(dataset, train_idx[0 :: base_config["sample"]]) + + data_params = { + "batch_size": training_config["batch_size"], + "num_workers": training_config["workers"], + "pin_memory": False, + "shuffle": True, + "collate_fn": collate_batch, + } + + setup_params = { + "optim": training_config["optim"], + "learning_rate": training_config["learning_rate"], + "weight_decay": training_config["weight_decay"], + "momentum": training_config["momentum"], + "device": training_config["device"], + } + + restart_params = { + "resume": training_config["resume"], + "fine_tune": training_config["fine_tune"], + "transfer": training_config["transfer"], + } + + model_params = { + "task_dict": task_dict, + "robust": base_config["robust"], + "n_targets": n_targets, + "elem_emb_len": elem_emb_len, + **model_architecture, # unpack all model architecture parameters + } + + train_loader = DataLoader(train_set, **data_params) + + val_loader = DataLoader( + val_set, + **{**data_params, "batch_size": 16 * data_params["batch_size"], "shuffle": False}, + ) + + train_ensemble( + model_class=Roost, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + epochs=epochs, + train_loader=train_loader, + val_loader=val_loader, + log=base_config["log"], + setup_params=setup_params, + restart_params=restart_params, + model_params=model_params, + loss_dict=loss_dict, + ) + + test_loader = DataLoader( + test_set, + **{**data_params, "batch_size": 64 * data_params["batch_size"], "shuffle": False}, + ) + + results_dict = results_multitask( + model_class=Roost, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + test_loader=test_loader, + robust=base_config["robust"], + task_dict=task_dict, + device=training_config["device"], + eval_type="checkpoint", + save_results=False, + ) + + logits = results_dict["phdos_clf"]["logits"] + targets = results_dict["phdos_clf"]["targets"] + + # calculate metrics and errors with associated errors for ensembles + ens_logits = np.mean(logits, axis=0) + + ens_acc, *_, ens_roc_auc = get_metrics(targets, ens_logits, task).values() + + assert len(logits) == base_config["ensemble"] + assert len(targets) == len(test_set) == len(test_idx) + assert ens_acc > 0.9 + assert ens_roc_auc > 0.9 + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/test_roost_classification.py b/tests/test_roost_classification.py deleted file mode 100644 index 86322bf1..00000000 --- a/tests/test_roost_classification.py +++ /dev/null @@ -1,144 +0,0 @@ -import numpy as np -import torch -from sklearn.model_selection import train_test_split as split - -from aviary.roost.data import CompositionData, collate_batch -from aviary.roost.model import Roost -from aviary.utils import get_metrics, results_multitask, train_ensemble - - -def test_roost_clf(df_matbench_phonons): - elem_embedding = "matscholar200" - targets = ["phdos_clf"] - task = "classification" - losses = ["CSE"] - robust = True - model_name = "roost-clf-test" - elem_fea_len = 64 - n_graph = 3 - ensemble = 2 - run_id = 1 - data_seed = 42 - epochs = 15 - log = False - sample = 1 - test_size = 0.2 - resume = False - fine_tune = None - transfer = None - optim = "AdamW" - learning_rate = 3e-4 - momentum = 0.9 - weight_decay = 1e-6 - batch_size = 128 - workers = 0 - device = "cuda" if torch.cuda.is_available() else "cpu" - - task_dict = dict(zip(targets, [task])) - loss_dict = dict(zip(targets, losses)) - - dataset = CompositionData( - df=df_matbench_phonons, elem_embedding=elem_embedding, task_dict=task_dict - ) - n_targets = dataset.n_targets - elem_emb_len = dataset.elem_emb_len - - train_idx = list(range(len(dataset))) - - print(f"using {test_size} of training set as test set") - train_idx, test_idx = split(train_idx, random_state=data_seed, test_size=test_size) - test_set = torch.utils.data.Subset(dataset, test_idx) - - print("No validation set used, using test set for evaluation purposes") - # NOTE that when using this option care must be taken not to - # peak at the test-set. The only valid model to use is the one - # obtained after the final epoch where the epoch count is - # decided in advance of the experiment. - val_set = test_set - - train_set = torch.utils.data.Subset(dataset, train_idx[0::sample]) - - data_params = { - "batch_size": batch_size, - "num_workers": workers, - "pin_memory": False, - "shuffle": True, - "collate_fn": collate_batch, - } - - setup_params = { - "optim": optim, - "learning_rate": learning_rate, - "weight_decay": weight_decay, - "momentum": momentum, - "device": device, - } - - restart_params = { - "resume": resume, - "fine_tune": fine_tune, - "transfer": transfer, - } - - model_params = { - "task_dict": task_dict, - "robust": robust, - "n_targets": n_targets, - "elem_emb_len": elem_emb_len, - "elem_fea_len": elem_fea_len, - "n_graph": n_graph, - "elem_heads": 2, - "elem_gate": [256], - "elem_msg": [256], - "cry_heads": 2, - "cry_gate": [256], - "cry_msg": [256], - "trunk_hidden": [256, 256], - "out_hidden": [128, 64], - } - - train_ensemble( - model_class=Roost, - model_name=model_name, - run_id=run_id, - ensemble_folds=ensemble, - epochs=epochs, - train_set=train_set, - val_set=val_set, - log=log, - data_params=data_params, - setup_params=setup_params, - restart_params=restart_params, - model_params=model_params, - loss_dict=loss_dict, - ) - - data_params["batch_size"] = 64 * batch_size # faster model inference - data_params["shuffle"] = False # need fixed data order due to ensembling - - results_dict = results_multitask( - model_class=Roost, - model_name=model_name, - run_id=run_id, - ensemble_folds=ensemble, - test_set=test_set, - data_params=data_params, - robust=robust, - task_dict=task_dict, - device=device, - eval_type="checkpoint", - save_results=False, - ) - - logits = results_dict["phdos_clf"]["logits"] - targets = results_dict["phdos_clf"]["targets"] - - # calculate metrics and errors with associated errors for ensembles - ens_logits = np.mean(logits, axis=0) - - ens_acc, *_, ens_roc_auc = get_metrics(targets, ens_logits, task).values() - - assert len(logits) == ensemble - assert len(targets) == len(test_set) == len(test_idx) - assert ens_acc > 0.9 - assert ens_roc_auc > 0.9 diff --git a/tests/test_roost_regression.py b/tests/test_roost_regression.py deleted file mode 100644 index 125b0031..00000000 --- a/tests/test_roost_regression.py +++ /dev/null @@ -1,143 +0,0 @@ -import numpy as np -import torch -from sklearn.model_selection import train_test_split as split - -from aviary.roost.data import CompositionData, collate_batch -from aviary.roost.model import Roost -from aviary.utils import get_metrics, results_multitask, train_ensemble - - -def test_roost_regression(df_matbench_phonons): - elem_embedding = "matscholar200" - target_name = "last phdos peak" - task = "regression" - losses = ["L1"] - robust = True - model_name = "roost-reg-test" - elem_fea_len = 64 - n_graph = 3 - ensemble = 2 - run_id = 1 - data_seed = 42 - epochs = 25 - log = False - sample = 1 - test_size = 0.2 - resume = False - fine_tune = None - transfer = None - optim = "AdamW" - learning_rate = 3e-4 - momentum = 0.9 - weight_decay = 1e-6 - batch_size = 128 - workers = 0 - device = "cuda" if torch.cuda.is_available() else "cpu" - - task_dict = dict(zip([target_name], [task])) - loss_dict = dict(zip([target_name], losses)) - - dataset = CompositionData( - df=df_matbench_phonons, elem_embedding=elem_embedding, task_dict=task_dict - ) - n_targets = dataset.n_targets - elem_emb_len = dataset.elem_emb_len - - train_idx = list(range(len(dataset))) - - print(f"using {test_size} of training set as test set") - train_idx, test_idx = split(train_idx, random_state=data_seed, test_size=test_size) - test_set = torch.utils.data.Subset(dataset, test_idx) - - print("No validation set used, using test set for evaluation purposes") - # NOTE that when using this option care must be taken not to - # peak at the test-set. The only valid model to use is the one - # obtained after the final epoch where the epoch count is - # decided in advance of the experiment. - val_set = test_set - - train_set = torch.utils.data.Subset(dataset, train_idx[0::sample]) - - data_params = { - "batch_size": batch_size, - "num_workers": workers, - "pin_memory": False, - "shuffle": True, - "collate_fn": collate_batch, - } - - setup_params = { - "optim": optim, - "learning_rate": learning_rate, - "weight_decay": weight_decay, - "momentum": momentum, - "device": device, - } - - restart_params = { - "resume": resume, - "fine_tune": fine_tune, - "transfer": transfer, - } - - model_params = { - "task_dict": task_dict, - "robust": robust, - "n_targets": n_targets, - "elem_emb_len": elem_emb_len, - "elem_fea_len": elem_fea_len, - "n_graph": n_graph, - "elem_heads": 2, - "elem_gate": [256], - "elem_msg": [256], - "cry_heads": 2, - "cry_gate": [256], - "cry_msg": [256], - "trunk_hidden": [256, 256], - "out_hidden": [128, 64], - } - - train_ensemble( - model_class=Roost, - model_name=model_name, - run_id=run_id, - ensemble_folds=ensemble, - epochs=epochs, - train_set=train_set, - val_set=val_set, - log=log, - data_params=data_params, - setup_params=setup_params, - restart_params=restart_params, - model_params=model_params, - loss_dict=loss_dict, - ) - - data_params["batch_size"] = 64 * batch_size # faster model inference - data_params["shuffle"] = False # need fixed data order due to ensembling - - results_dict = results_multitask( - model_class=Roost, - model_name=model_name, - run_id=run_id, - ensemble_folds=ensemble, - test_set=test_set, - data_params=data_params, - robust=robust, - task_dict=task_dict, - device=device, - eval_type="checkpoint", - save_results=False, - ) - - preds = results_dict[target_name]["preds"] - targets = results_dict[target_name]["targets"] - - y_ens = np.mean(preds, axis=0) - - mae, rmse, r2 = get_metrics(targets, y_ens, task).values() - - assert len(targets) == len(test_set) == len(test_idx) - assert r2 > 0.7 - assert mae < 150 - assert rmse < 300 diff --git a/tests/test_wren.py b/tests/test_wren.py new file mode 100644 index 00000000..bd391391 --- /dev/null +++ b/tests/test_wren.py @@ -0,0 +1,292 @@ +import numpy as np +import pytest +import torch +from sklearn.model_selection import train_test_split as split +from torch.utils.data import DataLoader + +from aviary.utils import get_metrics, results_multitask, train_ensemble +from aviary.wren.data import WyckoffData, collate_batch +from aviary.wren.model import Wren + + +@pytest.fixture +def base_config(): + return { + "elem_embedding": "matscholar200", + "sym_emb": "bra-alg-off", + "robust": True, + "ensemble": 2, + "run_id": 1, + "data_seed": 42, + "log": False, + "sample": 1, + "test_size": 0.2, + } + + +@pytest.fixture +def model_architecture(): + return { + "elem_fea_len": 32, + "sym_fea_len": 32, + "n_graph": 3, + "elem_heads": 2, + "elem_gate": [256], + "elem_msg": [256], + "cry_heads": 2, + "cry_gate": [256], + "cry_msg": [256], + "out_hidden": [256], + "trunk_hidden": [64], + } + + +@pytest.fixture +def training_config(): + return { + "resume": False, + "fine_tune": None, + "transfer": None, + "optim": "AdamW", + "learning_rate": 3e-4, + "momentum": 0.9, + "weight_decay": 1e-6, + "batch_size": 128, + "workers": 0, + "device": "cuda" if torch.cuda.is_available() else "cpu", + } + + +def test_wren_regression( + df_matbench_phonons_wyckoff, base_config, model_architecture, training_config +): + target_name = "last phdos peak" + task = "regression" + losses = ["L1"] + epochs = 25 + model_name = "wren-reg-test" + + task_dict = dict(zip([target_name], [task], strict=False)) + loss_dict = dict(zip([target_name], losses, strict=False)) + + dataset = WyckoffData( + df=df_matbench_phonons_wyckoff, + elem_embedding=base_config["elem_embedding"], + sym_emb=base_config["sym_emb"], + task_dict=task_dict, + ) + n_targets = dataset.n_targets + elem_emb_len = dataset.elem_emb_len + sym_emb_len = dataset.sym_emb_len + + train_idx = list(range(len(dataset))) + train_idx, test_idx = split( + train_idx, + random_state=base_config["data_seed"], + test_size=base_config["test_size"], + ) + test_set = torch.utils.data.Subset(dataset, test_idx) + val_set = test_set + train_set = torch.utils.data.Subset(dataset, train_idx[0 :: base_config["sample"]]) + + data_params = { + "batch_size": training_config["batch_size"], + "num_workers": training_config["workers"], + "pin_memory": False, + "shuffle": True, + "collate_fn": collate_batch, + } + + train_loader = DataLoader(train_set, **data_params) + + val_loader = DataLoader( + val_set, + **{**data_params, "batch_size": 16 * data_params["batch_size"], "shuffle": False}, + ) + + setup_params = { + "optim": training_config["optim"], + "learning_rate": training_config["learning_rate"], + "weight_decay": training_config["weight_decay"], + "momentum": training_config["momentum"], + "device": training_config["device"], + } + + restart_params = { + "resume": training_config["resume"], + "fine_tune": training_config["fine_tune"], + "transfer": training_config["transfer"], + } + + model_params = { + "task_dict": task_dict, + "robust": base_config["robust"], + "n_targets": n_targets, + "elem_emb_len": elem_emb_len, + "sym_emb_len": sym_emb_len, + **model_architecture, + } + + train_ensemble( + model_class=Wren, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + epochs=epochs, + train_loader=train_loader, + val_loader=val_loader, + log=base_config["log"], + setup_params=setup_params, + restart_params=restart_params, + model_params=model_params, + loss_dict=loss_dict, + ) + + test_loader = DataLoader( + test_set, + **{**data_params, "batch_size": 64 * data_params["batch_size"], "shuffle": False}, + ) + + results_dict = results_multitask( + model_class=Wren, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + test_loader=test_loader, + robust=base_config["robust"], + task_dict=task_dict, + device=training_config["device"], + eval_type="checkpoint", + save_results=False, + ) + + preds = results_dict[target_name]["preds"] + targets = results_dict[target_name]["targets"] + + y_ens = np.mean(preds, axis=0) + mae, rmse, r2 = get_metrics(targets, y_ens, task).values() + + assert len(targets) == len(test_set) == len(test_idx) + assert r2 > 0.7 + assert mae < 150 + assert rmse < 300 + + +def test_wren_clf( + df_matbench_phonons_wyckoff, base_config, model_architecture, training_config +): + targets = ["phdos_clf"] + task = "classification" + losses = ["CSE"] + epochs = 15 + model_name = "wren-clf-test" + + task_dict = dict(zip(targets, [task], strict=False)) + loss_dict = dict(zip(targets, losses, strict=False)) + + dataset = WyckoffData( + df=df_matbench_phonons_wyckoff, + elem_embedding=base_config["elem_embedding"], + sym_emb=base_config["sym_emb"], + task_dict=task_dict, + ) + n_targets = dataset.n_targets + elem_emb_len = dataset.elem_emb_len + sym_emb_len = dataset.sym_emb_len + + train_idx = list(range(len(dataset))) + train_idx, test_idx = split( + train_idx, + random_state=base_config["data_seed"], + test_size=base_config["test_size"], + ) + test_set = torch.utils.data.Subset(dataset, test_idx) + val_set = test_set + train_set = torch.utils.data.Subset(dataset, train_idx[0 :: base_config["sample"]]) + + data_params = { + "batch_size": training_config["batch_size"], + "num_workers": training_config["workers"], + "pin_memory": False, + "shuffle": True, + "collate_fn": collate_batch, + } + + train_loader = DataLoader(train_set, **data_params) + + val_loader = DataLoader( + val_set, + **{**data_params, "batch_size": 16 * data_params["batch_size"], "shuffle": False}, + ) + + setup_params = { + "optim": training_config["optim"], + "learning_rate": training_config["learning_rate"], + "weight_decay": training_config["weight_decay"], + "momentum": training_config["momentum"], + "device": training_config["device"], + } + + restart_params = { + "resume": training_config["resume"], + "fine_tune": training_config["fine_tune"], + "transfer": training_config["transfer"], + } + + model_params = { + "task_dict": task_dict, + "robust": base_config["robust"], + "n_targets": n_targets, + "elem_emb_len": elem_emb_len, + "sym_emb_len": sym_emb_len, + **model_architecture, + } + + train_ensemble( + model_class=Wren, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + epochs=epochs, + train_loader=train_loader, + val_loader=val_loader, + log=base_config["log"], + setup_params=setup_params, + restart_params=restart_params, + model_params=model_params, + loss_dict=loss_dict, + ) + + test_loader = DataLoader( + test_set, + **{**data_params, "batch_size": 64 * data_params["batch_size"], "shuffle": False}, + ) + + results_dict = results_multitask( + model_class=Wren, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + test_loader=test_loader, + robust=base_config["robust"], + task_dict=task_dict, + device=training_config["device"], + eval_type="checkpoint", + save_results=False, + ) + + logits = results_dict["phdos_clf"]["logits"] + targets = results_dict["phdos_clf"]["targets"] + + # calculate metrics and errors with associated errors for ensembles + ens_logits = np.mean(logits, axis=0) + + ens_acc, *_, ens_roc_auc = get_metrics(targets, ens_logits, task).values() + + assert len(targets) == len(test_set) == len(test_idx) + assert ens_acc > 0.85 + assert ens_roc_auc > 0.9 + + +if __name__ == "__main__": + pytest.main(["-v", __file__]) diff --git a/tests/test_wren_classification.py b/tests/test_wren_classification.py deleted file mode 100644 index c7db96e0..00000000 --- a/tests/test_wren_classification.py +++ /dev/null @@ -1,151 +0,0 @@ -import numpy as np -import torch -from sklearn.model_selection import train_test_split as split - -from aviary.utils import get_metrics, results_multitask, train_ensemble -from aviary.wren.data import WyckoffData, collate_batch -from aviary.wren.model import Wren - - -def test_wren_clf(df_matbench_phonons_wyckoff): - elem_embedding = "matscholar200" - sym_emb = "bra-alg-off" - targets = ["phdos_clf"] - task = "classification" - losses = ["CSE"] - robust = True - model_name = "wren-clf-test" - elem_fea_len = 32 - sym_fea_len = 32 - n_graph = 3 - ensemble = 2 - run_id = 1 - data_seed = 42 - epochs = 15 - log = False - sample = 1 - test_size = 0.2 - resume = False - fine_tune = None - transfer = None - optim = "AdamW" - learning_rate = 3e-4 - momentum = 0.9 - weight_decay = 1e-6 - batch_size = 128 - workers = 0 - device = "cuda" if torch.cuda.is_available() else "cpu" - - task_dict = dict(zip(targets, [task])) - loss_dict = dict(zip(targets, losses)) - - dataset = WyckoffData( - df=df_matbench_phonons_wyckoff, - elem_embedding=elem_embedding, - sym_emb=sym_emb, - task_dict=task_dict, - ) - n_targets = dataset.n_targets - elem_emb_len = dataset.elem_emb_len - sym_emb_len = dataset.sym_emb_len - - train_idx = list(range(len(dataset))) - - print(f"using {test_size} of training set as test set") - train_idx, test_idx = split(train_idx, random_state=data_seed, test_size=test_size) - test_set = torch.utils.data.Subset(dataset, test_idx) - - print("No validation set used, using test set for evaluation purposes") - # NOTE that when using this option care must be taken not to - # peak at the test-set. The only valid model to use is the one - # obtained after the final epoch where the epoch count is - # decided in advance of the experiment. - val_set = test_set - - train_set = torch.utils.data.Subset(dataset, train_idx[0::sample]) - - data_params = { - "batch_size": batch_size, - "num_workers": workers, - "pin_memory": False, - "shuffle": True, - "collate_fn": collate_batch, - } - - setup_params = { - "optim": optim, - "learning_rate": learning_rate, - "weight_decay": weight_decay, - "momentum": momentum, - "device": device, - } - - restart_params = { - "resume": resume, - "fine_tune": fine_tune, - "transfer": transfer, - } - - model_params = { - "task_dict": task_dict, - "robust": robust, - "n_targets": n_targets, - "elem_emb_len": elem_emb_len, - "sym_emb_len": sym_emb_len, - "elem_fea_len": elem_fea_len, - "sym_fea_len": sym_fea_len, - "n_graph": n_graph, - "elem_heads": 2, - "elem_gate": [256], - "elem_msg": [256], - "cry_heads": 2, - "cry_gate": [256], - "cry_msg": [256], - "out_hidden": [256], - "trunk_hidden": [64], - } - - train_ensemble( - model_class=Wren, - model_name=model_name, - run_id=run_id, - ensemble_folds=ensemble, - epochs=epochs, - train_set=train_set, - val_set=val_set, - log=log, - data_params=data_params, - setup_params=setup_params, - restart_params=restart_params, - model_params=model_params, - loss_dict=loss_dict, - ) - - data_params["batch_size"] = 64 * batch_size # faster model inference - data_params["shuffle"] = False # need fixed data order due to ensembling - - results_dict = results_multitask( - model_class=Wren, - model_name=model_name, - run_id=run_id, - ensemble_folds=ensemble, - test_set=test_set, - data_params=data_params, - robust=robust, - task_dict=task_dict, - device=device, - eval_type="checkpoint", - save_results=False, - ) - - logits = results_dict["phdos_clf"]["logits"] - targets = results_dict["phdos_clf"]["targets"] - - # calculate metrics and errors with associated errors for ensembles - ens_logits = np.mean(logits, axis=0) - - ens_acc, *_, ens_roc_auc = get_metrics(targets, ens_logits, task).values() - - assert len(targets) == len(test_set) == len(test_idx) - assert ens_acc > 0.85 - assert ens_roc_auc > 0.9 diff --git a/tests/test_wren_regression.py b/tests/test_wren_regression.py deleted file mode 100644 index a8ad73db..00000000 --- a/tests/test_wren_regression.py +++ /dev/null @@ -1,151 +0,0 @@ -import numpy as np -import torch -from sklearn.model_selection import train_test_split as split - -from aviary.utils import get_metrics, results_multitask, train_ensemble -from aviary.wren.data import WyckoffData, collate_batch -from aviary.wren.model import Wren - - -def test_wren_regression(df_matbench_phonons_wyckoff): - elem_embedding = "matscholar200" - sym_emb = "bra-alg-off" - target_name = "last phdos peak" - task = "regression" - losses = ["L1"] - robust = True - model_name = "wren-reg-test" - elem_fea_len = 32 - sym_fea_len = 32 - n_graph = 3 - ensemble = 2 - run_id = 1 - data_seed = 42 - epochs = 25 - log = False - sample = 1 - test_size = 0.2 - resume = False - fine_tune = None - transfer = None - optim = "AdamW" - learning_rate = 3e-4 - momentum = 0.9 - weight_decay = 1e-6 - batch_size = 128 - workers = 0 - device = "cuda" if torch.cuda.is_available() else "cpu" - - task_dict = dict(zip([target_name], [task])) - loss_dict = dict(zip([target_name], losses)) - - dataset = WyckoffData( - df=df_matbench_phonons_wyckoff, - elem_embedding=elem_embedding, - sym_emb=sym_emb, - task_dict=task_dict, - ) - n_targets = dataset.n_targets - elem_emb_len = dataset.elem_emb_len - sym_emb_len = dataset.sym_emb_len - - train_idx = list(range(len(dataset))) - - print(f"using {test_size} of training set as test set") - train_idx, test_idx = split(train_idx, random_state=data_seed, test_size=test_size) - test_set = torch.utils.data.Subset(dataset, test_idx) - - print("No validation set used, using test set for evaluation purposes") - # NOTE that when using this option care must be taken not to - # peak at the test-set. The only valid model to use is the one - # obtained after the final epoch where the epoch count is - # decided in advance of the experiment. - val_set = test_set - - train_set = torch.utils.data.Subset(dataset, train_idx[0::sample]) - - data_params = { - "batch_size": batch_size, - "num_workers": workers, - "pin_memory": False, - "shuffle": True, - "collate_fn": collate_batch, - } - - setup_params = { - "optim": optim, - "learning_rate": learning_rate, - "weight_decay": weight_decay, - "momentum": momentum, - "device": device, - } - - restart_params = { - "resume": resume, - "fine_tune": fine_tune, - "transfer": transfer, - } - - model_params = { - "task_dict": task_dict, - "robust": robust, - "n_targets": n_targets, - "elem_emb_len": elem_emb_len, - "sym_emb_len": sym_emb_len, - "elem_fea_len": elem_fea_len, - "sym_fea_len": sym_fea_len, - "n_graph": n_graph, - "elem_heads": 2, - "elem_gate": [256], - "elem_msg": [256], - "cry_heads": 2, - "cry_gate": [256], - "cry_msg": [256], - "out_hidden": [256], - "trunk_hidden": [64], - } - - train_ensemble( - model_class=Wren, - model_name=model_name, - run_id=run_id, - ensemble_folds=ensemble, - epochs=epochs, - train_set=train_set, - val_set=val_set, - log=log, - data_params=data_params, - setup_params=setup_params, - restart_params=restart_params, - model_params=model_params, - loss_dict=loss_dict, - ) - - data_params["batch_size"] = 64 * batch_size # faster model inference - data_params["shuffle"] = False # need fixed data order due to ensembling - - results_dict = results_multitask( - model_class=Wren, - model_name=model_name, - run_id=run_id, - ensemble_folds=ensemble, - test_set=test_set, - data_params=data_params, - robust=robust, - task_dict=task_dict, - device=device, - eval_type="checkpoint", - save_results=False, - ) - - preds = results_dict[target_name]["preds"] - targets = results_dict[target_name]["targets"] - - y_ens = np.mean(preds, axis=0) - - mae, rmse, r2 = get_metrics(targets, y_ens, task).values() - - assert len(targets) == len(test_set) == len(test_idx) - assert r2 > 0.7 - assert mae < 150 - assert rmse < 300 diff --git a/tests/test_wrenformer.py b/tests/test_wrenformer.py index 6adc349a..8149d464 100644 --- a/tests/test_wrenformer.py +++ b/tests/test_wrenformer.py @@ -1,37 +1,171 @@ -from aviary.train import train_wrenformer +import numpy as np +import pytest +import torch +from sklearn.model_selection import train_test_split as split +from aviary.utils import get_metrics, results_multitask, train_ensemble +from aviary.wrenformer.data import df_to_in_mem_dataloader +from aviary.wrenformer.model import Wrenformer -def test_wrenformer_regression(df_matbench_phonons_wyckoff): - train_df = df_matbench_phonons_wyckoff.sample(frac=0.8, random_state=0) - test_df = df_matbench_phonons_wyckoff.drop(train_df.index) - test_metrics, *_ = train_wrenformer( - run_name="wrenformer", - train_df=train_df, - test_df=test_df, - target_col="last phdos peak", - task_type="regression", - model_params=dict(n_attn_layers=2), - epochs=30, +@pytest.fixture +def base_config(): + return { + "robust": True, + "ensemble": 2, + "run_id": 1, + "data_seed": 42, + "log": False, + "sample": 1, + "test_size": 0.2, + } + + +@pytest.fixture +def model_architecture(): + return { + "d_model": 128, + "n_attn_layers": 2, + "n_attn_heads": 4, + "trunk_hidden": (1024, 512), + "out_hidden": (256, 128, 64), + "embedding_aggregations": ("mean",), + } + + +@pytest.fixture +def training_config(): + return { + "resume": False, + "fine_tune": None, + "transfer": None, + "optim": "AdamW", + "learning_rate": 3e-4, + "momentum": 0.9, + "weight_decay": 1e-6, + "batch_size": 128, + "workers": 0, + "device": "cuda" if torch.cuda.is_available() else "cpu", + } + + +def test_wrenformer_regression( + df_matbench_phonons_wyckoff, base_config, model_architecture, training_config +): + target_name = "last phdos peak" + task = "regression" + losses = ["L1"] + epochs = 25 + model_name = "wrenformer-reg-test" + input_col = "protostructure" + embedding_type = "protostructure" + + task_dict = dict(zip([target_name], [task], strict=False)) + loss_dict = dict(zip([target_name], losses, strict=False)) + + train_idx = list(range(len(df_matbench_phonons_wyckoff))) + train_idx, test_idx = split( + train_idx, + random_state=base_config["data_seed"], + test_size=base_config["test_size"], + ) + + train_df = df_matbench_phonons_wyckoff.iloc[train_idx[0 :: base_config["sample"]]] + test_df = df_matbench_phonons_wyckoff.iloc[test_idx] + val_df = test_df # Using test set for validation + + data_loader_kwargs = dict( + id_col="material_id", + input_col=input_col, + target_col=target_name, + embedding_type=embedding_type, + device=training_config["device"], + ) + + train_loader = df_to_in_mem_dataloader( + train_df, + batch_size=training_config["batch_size"], + shuffle=True, + **data_loader_kwargs, + ) + + val_loader = df_to_in_mem_dataloader( + val_df, + batch_size=training_config["batch_size"] * 16, + shuffle=False, + **data_loader_kwargs, ) - assert test_metrics["MAE"] < 260, test_metrics - assert test_metrics["RMSE"] < 420, test_metrics - assert test_metrics["R2"] > 0.1, test_metrics + setup_params = { + "optim": training_config["optim"], + "learning_rate": training_config["learning_rate"], + "weight_decay": training_config["weight_decay"], + "momentum": training_config["momentum"], + "device": training_config["device"], + } + + restart_params = { + "resume": training_config["resume"], + "fine_tune": training_config["fine_tune"], + "transfer": training_config["transfer"], + } + + n_targets = [1] # Regression task has 1 target + + model_params = { + "task_dict": task_dict, + "robust": base_config["robust"], + "n_targets": n_targets, + "n_features": train_loader.tensors[0][0].shape[-1], + **model_architecture, + } + train_ensemble( + model_class=Wrenformer, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + epochs=epochs, + train_loader=train_loader, + val_loader=val_loader, + log=base_config["log"], + setup_params=setup_params, + restart_params=restart_params, + model_params=model_params, + loss_dict=loss_dict, + ) -def test_wrenformer_classification(df_matbench_phonons_wyckoff): - train_df = df_matbench_phonons_wyckoff.sample(frac=0.8, random_state=0) - test_df = df_matbench_phonons_wyckoff.drop(train_df.index) + test_loader = df_to_in_mem_dataloader( + test_df, + batch_size=training_config["batch_size"] * 64, + shuffle=False, + **data_loader_kwargs, + ) - test_metrics, _, _ = train_wrenformer( - run_name="wrenformer-robust", - train_df=train_df, - test_df=test_df, - target_col="phdos_clf", - task_type="classification", - epochs=10, + results_dict = results_multitask( + model_class=Wrenformer, + model_name=model_name, + run_id=base_config["run_id"], + ensemble_folds=base_config["ensemble"], + test_loader=test_loader, + robust=base_config["robust"], + task_dict=task_dict, + device=training_config["device"], + eval_type="checkpoint", + save_results=False, ) - assert test_metrics["accuracy"] > 0.7, test_metrics - assert test_metrics["ROCAUC"] > 0.8, test_metrics + preds = results_dict[target_name]["preds"] + targets = results_dict[target_name]["targets"] + + y_ens = np.mean(preds, axis=0) + mae, rmse, r2 = get_metrics(targets, y_ens, task).values() + + assert len(targets) == len(test_df) + assert r2 > 0.7 + assert mae < 150 + assert rmse < 300 + + +if __name__ == "__main__": + pytest.main(["-v", __file__])