From: Ian Jackson Date: Sat, 18 Nov 2017 18:36:40 +0000 (+0000) Subject: symbolic.py: more ccode wip X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=33070131eee8d199a2093febd3a24b504686a583;p=moebius3.git symbolic.py: more ccode wip Signed-off-by: Ian Jackson --- diff --git a/symbolic.py b/symbolic.py index e44846e..bbcef81 100755 --- a/symbolic.py +++ b/symbolic.py @@ -153,25 +153,41 @@ dbg('result_dirnscaled') params = ('sh','th','la','mu','gamma','kappa') +def cprint(s): + print(s) + +def cassign(v, assign_to, tmp_prefix): + sym_iter = map((lambda i: symbols('%s%d' % (tmp_prefix,i))), + itertools.count()) + (defs, vs) = cse(v, symbols=sym_iter) + for defname, defval in defs: + cprint(ccode(defval, assign_to=defname)) + v = vs[0] + if isinstance(v,Matrix) and v.cols > 1: + for ix in range(0, v.cols): + cprint(ccode(v.col(ix), '%s[%d]' % (assign_to, ix))) + else: + cprint(ccode(v, assign_to=assign_to)) + + def gen_diff(current, smalls): + global j if not smalls: + j = zeros(len(params),0) for param in params: global d paramv = eval(param) d = diff(current, paramv) dbg('d') - print(ccode(d, assign_to='FOO')) - (defs, v) = cse(d, symbols=map((lambda i: symbols('tmp%d' % i)), - itertools.count())) - for vn, val in defs: - print(ccode(val, assign_to=vn)) - print(ccode(v[0], assign_to='BAR')) + j = j.row_join(d) + dbg('j') + cassign((j,), 'j', 'jtmp') else: small = smalls[0] smalls = smalls[1:] - print('if ',small,' nonsmall {') + cprint('if (!is_small(' + ccode(small) + ')) {') gen_diff(current, smalls) - print('} else { /* %s small */' % small) + cprint('} else { /* %s small */' % small) gen_diff(current.replace( sinc(small), 1 - small*small/factorial(3) - small**4/factorial(5),