2018-08-28 22:43:35 +02:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
2018-09-17 23:39:58 +02:00
|
|
|
from timfuz import Benchmark
|
2018-08-28 22:43:35 +02:00
|
|
|
import json
|
|
|
|
|
|
2018-09-17 20:15:42 +02:00
|
|
|
|
2018-08-28 22:43:35 +02:00
|
|
|
def write_state(state, fout):
|
|
|
|
|
j = {
|
|
|
|
|
'names': dict([(x, None) for x in state.names]),
|
|
|
|
|
'drop_names': list(state.drop_names),
|
|
|
|
|
'base_names': list(state.base_names),
|
|
|
|
|
'subs': dict([(name, values) for name, values in state.subs.items()]),
|
|
|
|
|
'pivots': state.pivots,
|
|
|
|
|
}
|
|
|
|
|
json.dump(j, fout, sort_keys=True, indent=4, separators=(',', ': '))
|
|
|
|
|
|
2018-09-17 20:15:42 +02:00
|
|
|
|
2018-08-28 22:43:35 +02:00
|
|
|
def gen_rows(fn_ins):
|
|
|
|
|
for fn_in in fn_ins:
|
|
|
|
|
try:
|
|
|
|
|
print('Loading %s' % fn_in)
|
|
|
|
|
j = json.load(open(fn_in, 'r'))
|
|
|
|
|
|
|
|
|
|
group0 = list(j['subs'].values())[0]
|
|
|
|
|
value0 = list(group0.values())[0]
|
|
|
|
|
if type(value0) is float:
|
|
|
|
|
print("WARNING: skipping old format JSON")
|
|
|
|
|
continue
|
|
|
|
|
else:
|
|
|
|
|
print("Value OK")
|
|
|
|
|
|
|
|
|
|
for sub in j['subs'].values():
|
|
|
|
|
row_ds = {}
|
|
|
|
|
# TODO: convert to gcd
|
|
|
|
|
# den may not always be 0
|
|
|
|
|
# lazy solution...just multiply out all the fractions
|
|
|
|
|
n = 1
|
|
|
|
|
for _var, (_num, den) in sub.items():
|
|
|
|
|
n *= den
|
2018-09-17 20:15:42 +02:00
|
|
|
|
2018-08-28 22:43:35 +02:00
|
|
|
for var, (num, den) in sub.items():
|
|
|
|
|
num2 = n * num
|
|
|
|
|
assert num2 % den == 0
|
|
|
|
|
row_ds[var] = num2 / den
|
|
|
|
|
yield row_ds
|
|
|
|
|
except:
|
|
|
|
|
print("Error processing %s" % fn_in)
|
|
|
|
|
raise
|
|
|
|
|
|
2018-09-17 20:15:42 +02:00
|
|
|
|
2018-08-28 22:43:35 +02:00
|
|
|
def run(fnout, fn_ins, verbose=0):
|
|
|
|
|
print('Loading data')
|
|
|
|
|
|
|
|
|
|
with open(fnout, 'w') as fout:
|
|
|
|
|
fout.write('ico,fast_max fast_min slow_max slow_min,rows...\n')
|
|
|
|
|
for row_ds in gen_rows(fn_ins):
|
|
|
|
|
ico = '1'
|
|
|
|
|
out_b = [1e9, 1e9, 1e9, 1e9]
|
|
|
|
|
items = [ico, ' '.join(['%u' % x for x in out_b])]
|
|
|
|
|
|
|
|
|
|
for k, v in sorted(row_ds.items()):
|
|
|
|
|
items.append('%i %s' % (v, k))
|
|
|
|
|
fout.write(','.join(items) + '\n')
|
|
|
|
|
|
2018-09-17 20:15:42 +02:00
|
|
|
|
2018-08-28 22:43:35 +02:00
|
|
|
def main():
|
|
|
|
|
import argparse
|
|
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(
|
|
|
|
|
description=
|
|
|
|
|
'Convert substitution groups into .csv to allow incremental rref results'
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
parser.add_argument('--verbose', action='store_true', help='')
|
|
|
|
|
parser.add_argument('--out', help='Output csv')
|
2018-09-17 23:23:00 +02:00
|
|
|
parser.add_argument('fns_in', nargs='+', help='sub.json input files')
|
2018-08-28 22:43:35 +02:00
|
|
|
args = parser.parse_args()
|
|
|
|
|
bench = Benchmark()
|
|
|
|
|
|
|
|
|
|
fns_in = args.fns_in
|
|
|
|
|
|
|
|
|
|
try:
|
2018-09-17 20:15:42 +02:00
|
|
|
run(fnout=args.out, fn_ins=args.fns_in, verbose=args.verbose)
|
2018-08-28 22:43:35 +02:00
|
|
|
finally:
|
|
|
|
|
print('Exiting after %s' % bench)
|
|
|
|
|
|
2018-09-17 20:15:42 +02:00
|
|
|
|
2018-08-28 22:43:35 +02:00
|
|
|
if __name__ == '__main__':
|
|
|
|
|
main()
|