Source code for tf_pwa.generator.generator

import abc
import time
from typing import Any


[docs]class BaseGenerator(metaclass=abc.ABCMeta): DataType = Any
[docs] @abc.abstractmethod def generate(self, N: int) -> Any: raise NotImplementedError("generate")
[docs]class GenTest: def __init__(self, N_max): self.N_max = N_max self.N_gen = 0 self.N_total = 0 self.eff = 0.9
[docs] def generate(self, N): self.N_gen = 0 self.N_total = 0 N_progress = 50 start_time = time.perf_counter() while self.N_gen < N: test_N = min(int((N - self.N_gen) / self.eff * 1.1), self.N_max) self.N_total += test_N yield test_N progress = self.N_gen / N + 1e-5 finsh = "▓" * int(progress * N_progress) need_do = "-" * (N_progress - int(progress * N_progress) - 1) now = time.perf_counter() - start_time print( "\r{:^3.1f}%[{}>{}] {:.2f}/{:.2f}s eff: {:.6f}% ".format( progress * 100, finsh, need_do, now, now / progress, self.eff * 100, ), end="", ) self.eff = (self.N_gen + 1) / (self.N_total + 1) # avoid zero end_time = time.perf_counter() - start_time print( "\r{:^3.1f}%[{}] {:.2f}/{:.2f}s eff: {:.6f}% ".format( 100, "▓" * N_progress, end_time, end_time, self.eff * 100 ) )
[docs] def add_gen(self, n_gen): # print("add gen") self.N_gen = self.N_gen + n_gen
[docs] def set_gen(self, n_gen): # print("set gen") self.N_gen = n_gen