From: Ian Jackson Date: Sat, 18 Nov 2017 18:03:53 +0000 (+0000) Subject: symbolic.py: prep for actual output X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=553d1b0eb2931fb104c9cdaa79c7c391595485a6;p=moebius3.git symbolic.py: prep for actual output Signed-off-by: Ian Jackson --- diff --git a/symbolic.py b/symbolic.py index c034b37..e44846e 100755 --- a/symbolic.py +++ b/symbolic.py @@ -151,26 +151,36 @@ q_dirn_dirnscaled = q_dirn_sqparm * gamma result_dirnscaled = q_sqparm.col_join(q_dirn_dirnscaled) dbg('result_dirnscaled') -for sm_sh in ((), (sh*sh*la,)): - for sm_th in ((), (th*th*la,)): - smalls = sm_sh + sm_th - result_fordiff = result_dirnscaled - for small in smalls: - result_fordiff = result_fordiff.replace( - sinc(small), - 1 - small*small/factorial(3) - small**4/factorial(5) - ) - print(smalls) - dbg('result_fordiff'); - for v in 'sh','th','la','mu','gamma','kappa': - dbg('diff(result_fordiff,%s)' % v) - d = diff(result_fordiff,eval(v)) +params = ('sh','th','la','mu','gamma','kappa') + +def gen_diff(current, smalls): + if not smalls: + 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')) + else: + small = smalls[0] + smalls = smalls[1:] + print('if ',small,' nonsmall {') + gen_diff(current, smalls) + print('} else { /* %s small */' % small) + gen_diff(current.replace( + sinc(small), + 1 - small*small/factorial(3) - small**4/factorial(5), + ), + smalls + ) + print('} /* %s small */' % small) + +gen_diff(result_dirnscaled, (sh*sh*la, th*th*la)) #bad = q_orgcoords[0] #badd = diff(bad, la)