File size: 1,022 Bytes
6aab6b3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | from abc import ABC, abstractmethod
from dataclasses import dataclass
from typing import List, Optional
from numpy.random import Generator
from boltzgen.data.data import Record
@dataclass
class Sample:
"""A sample with optional chain and interface IDs.
Attributes
----------
record : Record
The record.
chain_id : Optional[int]
The chain ID.
interface_id : Optional[int]
The interface ID.
"""
record_id: str
chain_id: Optional[int] = None
interface_id: Optional[int] = None
weight: Optional[float] = None
class Sampler(ABC):
"""Abstract base class for samplers."""
@abstractmethod
def sample(self, records: List[Record]) -> list[Sample]:
"""Sample a structure from the dataset infinitely.
Parameters
----------
records : List[Record]
The records to sample from.
Returns
-------
List[Sample]
The samples.
"""
raise NotImplementedError
|