chiark
/
gitweb
/
~ian
/
moebius3.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
553d1b0
)
symbolic.py: more ccode wip
author
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Sat, 18 Nov 2017 18:36:40 +0000
(18:36 +0000)
committer
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Sat, 18 Nov 2017 18:36:40 +0000
(18:36 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
symbolic.py
patch
|
blob
|
history
diff --git
a/symbolic.py
b/symbolic.py
index e44846eda32231448a75212d992cde586fdeb8ae..bbcef81c51a13ee561e8f27645a7a179b4d9ccc9 100755
(executable)
--- a/
symbolic.py
+++ b/
symbolic.py
@@
-153,25
+153,41
@@
dbg('result_dirnscaled')
params = ('sh','th','la','mu','gamma','kappa')
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):
def gen_diff(current, smalls):
+ global j
if not smalls:
if not smalls:
+ j = zeros(len(params),0)
for param in params:
global d
paramv = eval(param)
d = diff(current, paramv)
dbg('d')
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:]
else:
small = smalls[0]
smalls = smalls[1:]
-
print('if ',small,' nonsmall
{')
+
cprint('if (!is_small(' + ccode(small) + '))
{')
gen_diff(current, smalls)
gen_diff(current, smalls)
- print('} else { /* %s small */' % small)
+
c
print('} else { /* %s small */' % small)
gen_diff(current.replace(
sinc(small),
1 - small*small/factorial(3) - small**4/factorial(5),
gen_diff(current.replace(
sinc(small),
1 - small*small/factorial(3) - small**4/factorial(5),