Source code for intxeger.core.base

import random
from collections.abc import Sized
from typing import Dict, List


[docs]class Node(Sized): length = 0 def __len__(self) -> int: return self.length def __getitem__(self, idx: int) -> str: return self.get(idx)
[docs] def get(self, idx: int) -> str: raise NotImplementedError()
[docs] def sample(self, N: int = 1) -> List[str]: if N > self.length: raise ValueError() iterator = self.iterator() return [next(iterator) for _ in range(N)]
[docs] def iterator(self, ordered: bool = False): if ordered: for i in range(self.length): yield self.get(i) else: pool: Dict[int, int] = {} lower, upper = 0, self.length - 1 for _ in range(self.length): i = random.randint(lower, upper) x = pool.get(i, i) pool[i] = pool.get(lower, lower) lower += 1 yield self.get(x)