| import json |
| import torch |
|
|
| from .data_interface import register_dataset |
| from .lmdb_dataset import LMDBDataset |
|
|
|
|
| @register_dataset |
| class MutationZeroShotDataset(LMDBDataset): |
| """ |
| Dataset that deals with mutation data for zero-shot prediction |
| """ |
|
|
| def __init__(self, **kwargs): |
| """ |
| |
| Args: **kwargs: other arguments for LMDBDataset |
| |
| """ |
| super().__init__(**kwargs) |
|
|
| def __getitem__(self, index): |
| data = json.loads(self._get(index)) |
|
|
| return data["seq"], data["mut_info"], data["fitness"] |
|
|
| def __len__(self): |
| return int(self._get("length")) |
|
|
| def collate_fn(self, batch): |
| seqs, mut_info, fitness = zip(*batch) |
| |
| plddt = self._get("plddt") |
| if plddt is not None: |
| plddt = json.loads(plddt) |
| |
| inputs = {"wild_type": self._get("wild_type"), |
| "seqs": seqs, |
| "mut_info": mut_info, |
| "structure_content": self._get("structure_content"), |
| "structure_type": self._get("structure_type"), |
| "plddt": plddt} |
|
|
| labels = {"labels": torch.Tensor(fitness)} |
|
|
| return inputs, labels |