diff options
author | Jason Gross <jgross@mit.edu> | 2017-10-16 01:16:24 -0400 |
---|---|---|
committer | Jason Gross <jasongross9@gmail.com> | 2017-10-18 23:01:29 -0400 |
commit | 3963ad55fada5c6df6c52e82ee483da9a085c9a9 (patch) | |
tree | 50f5831e0608a6a48873ebdd9226460866cb9a86 /src/Specific/Framework | |
parent | 228b9c35ae331ac30b5829689d9a9320612edb67 (diff) |
Remake some curves
Diffstat (limited to 'src/Specific/Framework')
-rwxr-xr-x | src/Specific/Framework/make_curve.py | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/Specific/Framework/make_curve.py b/src/Specific/Framework/make_curve.py index 516b67868..65577fec6 100755 --- a/src/Specific/Framework/make_curve.py +++ b/src/Specific/Framework/make_curve.py @@ -29,6 +29,13 @@ def compute_c(modulus_str): ret.append((part, '1')) elif part[:3] == '-2^' and part[3:].isdigit(): ret.append((part[1:], '-1')) + elif len(part.split('*')) == 2: + a, b = part.split("*") + if "^" not in b: + ret.append((part, '1')) + else: + assert(b.replace(' ', '')[:2] == '2^') + ret.append((a.strip(), b.strip())) else: raw_input('Unhandled part: %s' % part) ret = None @@ -53,10 +60,23 @@ def compute_goldilocks(s, c): if two_k != 2 * k: return False return True - +def parse_base(base): + ret = 0 + for term in base.split('+'): + term = term.strip() + if term.isdigit(): + ret += int(term) + elif '.' in term and '/' not in term: + ret += float(term) + elif '/' in term and '.' not in term: + ret += Fraction(term) + else: + raw_input('Unhandled: %s' % term) + assert(False) + return ret def negate_numexpr(expr): - remap = dict([(d, d) for d in '0123456789^ '] + [('-', '+'), ('+', '-')]) + remap = dict([(d, d) for d in '0123456789^* '] + [('-', '+'), ('+', '-')]) return ''.join(remap[ch] for ch in expr) def usage(exitcode=0, errmsg=None): @@ -195,9 +215,9 @@ def make_curve_parameters(parameters): return 'Some %s%s' % (term, scope_string) return term replacements = dict(parameters) - assert(all(ch in '0123456789^+- ' for ch in parameters['modulus'])) + assert(all(ch in '0123456789^+-* ' for ch in parameters['modulus'])) modulus = eval(parameters['modulus'].replace('^', '**')) - base = float(parameters['base']) + base = parse_base(parameters['base']) replacements['reformatted_base'] = reformat_base(parameters['base']) replacements['bitwidth'] = parameters.get('bitwidth', str(compute_bitwidth(base))) bitwidth = int(replacements['bitwidth']) |