From f6fb4cb60c40d9db7e971ad8d39a0f9a08203f18 Mon Sep 17 00:00:00 2001 From: John McMaster Date: Wed, 29 Aug 2018 14:05:25 -0700 Subject: [PATCH] timfuz leastsq: write output solution Signed-off-by: John McMaster --- timfuz/solve_leastsq.py | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/timfuz/solve_leastsq.py b/timfuz/solve_leastsq.py index 0fc362c8..6d298969 100644 --- a/timfuz/solve_leastsq.py +++ b/timfuz/solve_leastsq.py @@ -111,6 +111,34 @@ def run_corner(Anp, b, names, verbose=False, opts={}, meta={}, outfn=None): print('') print(res.x) print('Done') + if outfn: + # ballpark minimum actual observed delay is around 7 (carry chain) + # anything less than one is probably a solver artifact + delta = 0.5 + + print('Writing resutls') + skips = 0 + with open(outfn, 'w') as fout: + # write as one variable per line + # this natively forms a bound if fed into linprog solver + fout.write('ico,fast_max fast_min slow_max slow_min,rows...\n') + for xval, name in zip(res.x, names): + row_ico = 1 + + # FIXME: only report for the given corner? + # also review ceil vs floor choice for min vs max + # lets be more conservative for now + if xval < delta: + #print('Skipping %s: %0.6f' % (name, xval)) + skips += 1 + continue + #xvali = round(xval) + xvali = math.ceil(xval) + corners = [xvali for _ in range(4)] + items = [str(row_ico), ' '.join([str(x) for x in corners])] + items.append('%u %s' % (1, name)) + fout.write(','.join(items) + '\n') + print('Wrote: skip %u => %u / %u valid delays' % (skips, len(names) - skips, len(names))) def main(): import argparse @@ -142,7 +170,7 @@ def main(): sub_json = load_sub(args.sub_json) try: - timfuz_solve.run(run_corner=run_corner, sub_json=sub_json, + timfuz_solve.run(run_corner=run_corner, sub_json=sub_json, fns_in=fns_in, corner=args.corner, massage=args.massage, outfn=args.out, verbose=args.verbose) finally: print('Exiting after %s' % bench) @@ -164,7 +192,7 @@ def test1(): # optimize.leastsq def test2(): - + # The function whose square is to be minimised. # params ... list of parameters tuned to minimise function. # Further arguments: