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),