mirror of https://github.com/openXC7/prjxray.git
timfuz: cleanup help
Signed-off-by: John McMaster <johndmcmaster@gmail.com>
This commit is contained in:
parent
3b686de46f
commit
bf5b435a69
|
|
@ -119,7 +119,7 @@ def run(
|
|||
def main():
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description='Timing fuzzer')
|
||||
parser = argparse.ArgumentParser(description='Matrix solving performance tests')
|
||||
|
||||
parser.add_argument('--verbose', action='store_true', help='')
|
||||
parser.add_argument('--sparse', action='store_true', help='')
|
||||
|
|
@ -108,11 +108,11 @@ def main():
|
|||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Check sub.json solution feasibility')
|
||||
description='Check if sub.json would make a linear equation solvable')
|
||||
|
||||
parser.add_argument('--verbose', action='store_true', help='')
|
||||
parser.add_argument('--sub-json', help='')
|
||||
parser.add_argument('fns_in', nargs='*', help='timing3.csv input files')
|
||||
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
|
||||
args = parser.parse_args()
|
||||
# Store options in dict to ease passing through functions
|
||||
bench = Benchmark()
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ def main():
|
|||
'--auto-name', action='store_true', help='timing3.csv => timing3c.csv')
|
||||
parser.add_argument('--out', default=None, help='Output csv')
|
||||
parser.add_argument('--corner', help='Output csv')
|
||||
parser.add_argument('fns_in', nargs='*', help='timing3.csv input files')
|
||||
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
|
||||
args = parser.parse_args()
|
||||
bench = Benchmark()
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,8 @@ def run(fns_in, fnout, sub_json, strict=False, verbose=False):
|
|||
def main():
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description='Solve timing solution')
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Substitute .csv to group correlated symbols')
|
||||
|
||||
parser.add_argument('--verbose', action='store_true', help='')
|
||||
parser.add_argument('--strict', action='store_true', help='')
|
||||
|
|
@ -44,7 +45,7 @@ def main():
|
|||
required=True,
|
||||
help='Group substitutions to make fully ranked')
|
||||
parser.add_argument('--out', help='Output sub.json substitution result')
|
||||
parser.add_argument('fns_in', nargs='*', help='timing3.txt input files')
|
||||
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
|
||||
args = parser.parse_args()
|
||||
# Store options in dict to ease passing through functions
|
||||
bench = Benchmark()
|
||||
|
|
|
|||
|
|
@ -52,37 +52,44 @@ def gen_flat(fnin, sub_json, corner=None):
|
|||
yield zero, zero_row
|
||||
|
||||
|
||||
def run(fnin, fnout, sub_json, corner=None, sort=False, verbose=False):
|
||||
def run(fns_in, fnout, sub_json, corner=None, sort=False, verbose=False):
|
||||
'''
|
||||
if sort:
|
||||
sortf = sorted
|
||||
else:
|
||||
sortf = lambda x: x
|
||||
'''
|
||||
|
||||
with open(fnout, 'w') as fout:
|
||||
fout.write('ico,fast_max fast_min slow_max slow_min,rows...\n')
|
||||
#for name, corners in sortf(gen_flat(fnin, sub_json)):
|
||||
for name, corners in gen_flat(fnin, sub_json, corner=corner):
|
||||
row_ico = 1
|
||||
items = [str(row_ico), corners2csv(corners)]
|
||||
items.append('%u %s' % (1, name))
|
||||
fout.write(','.join(items) + '\n')
|
||||
for fnin in fns_in:
|
||||
#for name, corners in sortf(gen_flat(fnin, sub_json)):
|
||||
for name, corners in gen_flat(fnin, sub_json, corner=corner):
|
||||
row_ico = 1
|
||||
items = [str(row_ico), corners2csv(corners)]
|
||||
items.append('%u %s' % (1, name))
|
||||
fout.write(','.join(items) + '\n')
|
||||
|
||||
|
||||
def main():
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description='Solve timing solution')
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Substitute .csv to ungroup correlated symbols')
|
||||
|
||||
parser.add_argument('--verbose', action='store_true', help='')
|
||||
parser.add_argument('--sort', action='store_true', help='')
|
||||
#parser.add_argument('--sort', action='store_true', help='')
|
||||
parser.add_argument('--sub-csv', help='')
|
||||
parser.add_argument(
|
||||
'--sub-json',
|
||||
required=True,
|
||||
help='Group substitutions to make fully ranked')
|
||||
parser.add_argument('--corner', default=None, help='')
|
||||
parser.add_argument('fnin', default=None, help='input timing delay .csv')
|
||||
parser.add_argument('fnout', default=None, help='output timing delay .csv')
|
||||
parser.add_argument('--out', default=None, help='output timing delay .csv')
|
||||
parser.add_argument(
|
||||
'fns_in',
|
||||
default=None,
|
||||
help='input timing delay .csv (NOTE: must be single column)')
|
||||
args = parser.parse_args()
|
||||
# Store options in dict to ease passing through functions
|
||||
bench = Benchmark()
|
||||
|
|
@ -91,10 +98,10 @@ def main():
|
|||
|
||||
try:
|
||||
run(
|
||||
args.fnin,
|
||||
args.fnout,
|
||||
args.fns_in,
|
||||
args.out,
|
||||
sub_json=sub_json,
|
||||
sort=args.sort,
|
||||
#sort=args.sort,
|
||||
verbose=args.verbose,
|
||||
corner=args.corner)
|
||||
finally:
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ build/$(CORNER)/linprog.csv: build/$(CORNER)/leastsq.csv build/grouped.csv
|
|||
|
||||
build/$(CORNER)/flat.csv: build/$(CORNER)/linprog.csv
|
||||
# Take separated variables and back-annotate them to the original timing variables
|
||||
python3 $(TIMFUZ_DIR)/csv_group2flat.py --sub-json build/sub.json --corner $(CORNER) --sort build/$(CORNER)/linprog.csv build/$(CORNER)/flat.csv.tmp
|
||||
python3 $(TIMFUZ_DIR)/csv_group2flat.py --sub-json build/sub.json --corner $(CORNER) --sort --out build/$(CORNER)/flat.csv.tmp build/$(CORNER)/linprog.csv
|
||||
mv build/$(CORNER)/flat.csv.tmp build/$(CORNER)/flat.csv
|
||||
|
||||
build/$(CORNER)/tilea.json: build/$(CORNER)/flat.csv
|
||||
|
|
|
|||
|
|
@ -14,28 +14,12 @@ from collections import OrderedDict
|
|||
from fractions import Fraction
|
||||
|
||||
|
||||
def fracr(r):
|
||||
DELTA = 0.0001
|
||||
|
||||
for i, x in enumerate(r):
|
||||
if type(x) is float:
|
||||
xi = int(x)
|
||||
assert abs(xi - x) < DELTA
|
||||
r[i] = xi
|
||||
return [Fraction(x) for x in r]
|
||||
|
||||
|
||||
def fracm(m):
|
||||
return [fracr(r) for r in m]
|
||||
|
||||
|
||||
def fracr_quick(r):
|
||||
return [Fraction(numerator=int(x), denominator=1) for x in r]
|
||||
|
||||
|
||||
# the way I'm doing thing they should all be even integers
|
||||
# hmm this was only slightly faster
|
||||
def fracm_quick(m):
|
||||
'''Convert integer matrix to Fraction matrix'''
|
||||
t = type(m[0][0])
|
||||
print('fracm_quick type: %s' % t)
|
||||
return [fracr_quick(r) for r in m]
|
||||
|
|
@ -149,7 +133,6 @@ def state_rref(state, verbose=False):
|
|||
#msym = sympy.MutableSparseMatrix(mfrac)
|
||||
msym = sympy.Matrix(mfrac)
|
||||
# internal encoding has significnat performance implications
|
||||
#print(type(msym[3]))
|
||||
#assert type(msym[0]) is sympy.Integer
|
||||
|
||||
if verbose:
|
||||
|
|
@ -221,7 +204,10 @@ def run(fnout, fn_ins, simplify=False, corner=None, verbose=0):
|
|||
def main():
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description='Timing fuzzer')
|
||||
parser = argparse.ArgumentParser(
|
||||
description=
|
||||
'Compute reduced row echelon (RREF) to form sub.json (variable groups)'
|
||||
)
|
||||
|
||||
parser.add_argument('--verbose', action='store_true', help='')
|
||||
parser.add_argument('--simplify', action='store_true', help='')
|
||||
|
|
@ -231,14 +217,10 @@ def main():
|
|||
default='build_speed/speed.json',
|
||||
help='Provides speed index to name translation')
|
||||
parser.add_argument('--out', help='Output sub.json substitution result')
|
||||
parser.add_argument('fns_in', nargs='+', help='timing3.txt input files')
|
||||
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
|
||||
args = parser.parse_args()
|
||||
bench = Benchmark()
|
||||
|
||||
fns_in = args.fns_in
|
||||
if not fns_in:
|
||||
fns_in = glob.glob('specimen_*/timing3.csv')
|
||||
|
||||
try:
|
||||
run(
|
||||
fnout=args.out,
|
||||
|
|
|
|||
|
|
@ -156,13 +156,16 @@ def main():
|
|||
'Solve timing solution using least squares objective function')
|
||||
|
||||
parser.add_argument('--verbose', action='store_true', help='')
|
||||
parser.add_argument('--massage', action='store_true', help='')
|
||||
parser.add_argument(
|
||||
'--massage',
|
||||
action='store_true',
|
||||
help='Derive additional constraints to improve solution')
|
||||
parser.add_argument(
|
||||
'--sub-json', help='Group substitutions to make fully ranked')
|
||||
parser.add_argument('--corner', default="slow_max", help='')
|
||||
parser.add_argument('--corner', required=True, default="slow_max", help='')
|
||||
parser.add_argument(
|
||||
'--out', default=None, help='output timing delay .json')
|
||||
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
|
||||
parser.add_argument('fns_in', nargs='+', 'timing3.csv input files')
|
||||
args = parser.parse_args()
|
||||
# Store options in dict to ease passing through functions
|
||||
bench = Benchmark()
|
||||
|
|
|
|||
|
|
@ -195,10 +195,10 @@ def main():
|
|||
parser.add_argument('--sub-csv', help='')
|
||||
parser.add_argument(
|
||||
'--sub-json', help='Group substitutions to make fully ranked')
|
||||
parser.add_argument('--corner', default=None, required=True, help='')
|
||||
parser.add_argument('--corner', required=True, default="slow_max", help='')
|
||||
parser.add_argument(
|
||||
'--out', default=None, help='output timing delay .json')
|
||||
parser.add_argument('fns_in', nargs='*', help='timing3.csv input files')
|
||||
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
|
||||
args = parser.parse_args()
|
||||
# Store options in dict to ease passing through functions
|
||||
bench = Benchmark()
|
||||
|
|
@ -216,7 +216,7 @@ def main():
|
|||
run_corner=run_corner,
|
||||
sub_json=sub_json,
|
||||
sub_csv=args.sub_csv,
|
||||
fns_in=fns_in,
|
||||
fn_in=fn_in,
|
||||
corner=args.corner,
|
||||
massage=args.massage,
|
||||
outfn=args.out,
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ def main():
|
|||
|
||||
parser.add_argument('--verbose', action='store_true', help='')
|
||||
parser.add_argument('--out', help='Output csv')
|
||||
parser.add_argument('fns_in', nargs='*', help='sub.json input files')
|
||||
parser.add_argument('fns_in', nargs='+', help='sub.json input files')
|
||||
args = parser.parse_args()
|
||||
bench = Benchmark()
|
||||
|
||||
|
|
|
|||
|
|
@ -9,16 +9,10 @@ import time
|
|||
import json
|
||||
|
||||
|
||||
# corner wokraround
|
||||
def quad(x):
|
||||
return [x for _ in range(4)]
|
||||
|
||||
|
||||
def run(fnin, fnout, tile_json_fn, verbose=False):
|
||||
# modified in place
|
||||
tilej = json.load(open(tile_json_fn, 'r'))
|
||||
|
||||
# FIXME: all corners
|
||||
Ads, bs = loadc_Ads_bs([fnin], ico=True)
|
||||
bounds = Ads2bounds(Ads, bs)
|
||||
|
||||
|
|
@ -71,9 +65,12 @@ def run(fnin, fnout, tile_json_fn, verbose=False):
|
|||
def main():
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description='')
|
||||
parser = argparse.ArgumentParser(
|
||||
description=
|
||||
'Substitute timgrid timing model names for real timing values')
|
||||
parser.add_argument('--tile-json', default='tiles.json', help='')
|
||||
parser.add_argument('fnin', default=None, help='Flattened timing csv')
|
||||
parser.add_argument(
|
||||
'fnin', default=None, help='Input flattened timing csv (flat.json)')
|
||||
parser.add_argument('fnout', default=None, help='output tile .json')
|
||||
args = parser.parse_args()
|
||||
|
||||
|
|
|
|||
|
|
@ -255,14 +255,15 @@ def main():
|
|||
)
|
||||
|
||||
parser.add_argument('--verbose', type=int, help='')
|
||||
# made a bulk conversion easier...keep?
|
||||
parser.add_argument(
|
||||
'--auto-name', action='store_true', help='timing3.txt => timing3.csv')
|
||||
parser.add_argument(
|
||||
'--speed-json',
|
||||
default='build_speed/speed.json',
|
||||
help='Provides speed index to name translation')
|
||||
parser.add_argument('--out', default=None, help='Output csv')
|
||||
parser.add_argument('fns_in', nargs='*', help='timing3.txt input files')
|
||||
parser.add_argument('--out', default=None, help='Output timing3.csv file')
|
||||
parser.add_argument('fns_in', nargs='+', help='Input timing3.txt files')
|
||||
args = parser.parse_args()
|
||||
bench = Benchmark()
|
||||
|
||||
|
|
@ -274,6 +275,8 @@ def main():
|
|||
fnout = fnin.replace('.txt', '.csv')
|
||||
assert fnout != fnin, 'Expect .txt in'
|
||||
else:
|
||||
# practically there are too many stray prints to make this work as expected
|
||||
assert 0, 'File name required'
|
||||
fnout = '/dev/stdout'
|
||||
print("Writing to %s" % fnout)
|
||||
fout = open(fnout, 'w')
|
||||
|
|
|
|||
Loading…
Reference in New Issue