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 @@
[](https://github.com/comprhys/aviary/commits)
[](https://github.com/CompRhys/aviary/actions/workflows/test.yml)
[](https://results.pre-commit.ci/latest/github/CompRhys/aviary/main)
-[](https://python.org/downloads)
+[](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__])