def __init__(self, parameters, poly_file): self.parameters = parameters params = self.parameters.myparams( { "name": str, "workdir": str, "batch_size": int }, ['tasks', 'sieve']) self.name = params.get("name") self.workdir = params.get("workdir") self.batch_size = params.get("batch_size") # variables that are accessed from multiple threads self.stage = 'sieve' self.stage_lock = threading.Lock() self.finished = False self.finished_lock = threading.Lock() self.queue = deque() self.queue_lock = threading.Lock() self.rels_total = 0 self.rels_total_lock = threading.Lock() # if rels_wanted is not set, then specify a default initial value based on the large prime bounds self.rels_wanted = parameters.myparams({ "rels_wanted": 0 }, ["tasks", "sieve", "sieving", "las"]).get("rels_wanted") if self.rels_wanted == 0: # taking into account duplicates, the initial value # pi(2^lpbr) + pi(2^lpba) should be good paths = ["tasks", "sieve", "sieving", "las"] nr = 2**self.parameters.myparams({"lpbr": int}, paths).get("lpbr") na = 2**self.parameters.myparams({"lpba": int}, paths).get("lpba") nra = int(nr / log(nr) + na / log(na)) self.rels_wanted = nra self.rels_wanted_lock = threading.Lock() # compile regular expressions here for speed self.relation_re = re.compile("(-?\d*),(\d*):(.*)") self.relation_total_re = re.compile("# Total (\d+) reports") self.relation_file_re = re.compile("%s[.]sieving[.](\d+)-(\d+)[.]gz" % self.name) self.completed_factorization = False self.poly_file = poly_file self.poly = None with open(self.poly_file, 'r') as f: self.poly = Polynomials(f.readlines()) self.reldir = os.path.join(self.workdir, self.name + ".upload") self.msieve_dat_file = os.path.join(self.workdir, self.name + ".dat") # The relation files that we will pass on to filtering # TODO: we might not need this variable self.relation_files = [] # The set of files that we have already seen and processed self.seen_files = set() self.fb_paths = None self.freerel_output = None self.generator = None self.start_time = None
def parse_poly(input): block = [] for line in input.split("\n"): line = line.strip() if line: block.append(line) else: if block: try: yield Polynomials(block) except Exception as e: pass block = [] if block: try: yield Polynomials(block) except Exception as e: pass