コード例 #1
0
ファイル: sieving.py プロジェクト: conservapp/faas_plus
    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
コード例 #2
0
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