From: Ian Jackson Date: Sat, 7 Apr 2018 18:42:55 +0000 (+0100) Subject: curveopt: symbolic: wip X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=66615c05daa45c98528cc6072dddc8e1cd8c1754;p=moebius3.git curveopt: symbolic: wip Signed-off-by: Ian Jackson --- diff --git a/symbolic.py b/symbolic.py index f12a96d..06ef2c6 100644 --- a/symbolic.py +++ b/symbolic.py @@ -71,11 +71,6 @@ def calculate(): F = E + En * EFl G = H + Hn * GHl - #cost_EFCD = subst_vect(cost_ABCD, (A,E), (B,F)) - #cost_FBCD = subst_vect(cost_ABCD, (A,F)) - #cost_ABCG = subst_vect(cost_ABCD, (D,G)) - #cost_ABGH = subst_vect(cost_ABCD, (C,G), (D,H)) - # diff_A_i = cost_ABCD.diff(vector_component(A, 0)) # global diff_A_i # dbg('diff_A_i') @@ -137,30 +132,44 @@ def gen_diff(current, smalls): def gen_misc(): cprintraw('// AUTOGENERATED - DO NOT EDIT\n') -def gen_point_index_macro(macro_basename, c_array_name, base_index): - cprintraw('#define %s (&%s[%s])' - % (macro_basename, c_array_name, base_index)) +def gen_point_coords_macro(macro_basename): ijk = 'i j k'.split(' ') for ii in range(0, len(ijk)): cprintraw('#define %s_%s (%s[%d])' % (macro_basename, ijk[ii], macro_basename, ii)) -def gen_abcd_ijk_macros(): +def gen_point_index_macro(macro_basename, c_array_name, base_index): + cprintraw('#define %s (&%s[%s])' + % (macro_basename, c_array_name, base_index)) + gen_point_coords_macro(macro_basename) + +def gen_point_references(): abcd = 'A B C D'.split(' ') eh = 'E En H Hn'.split(' ') for ehi in range(0, len(eh)): gen_point_index_macro(eh[ehi], 'FIXED', ehi * 3) + cprint('#define POINT(PP) (') + cprint(' (PP) == 0 ? E :') + cprint(' (PP) == 1 ? F :') + cprint(' (PP) == N-2 ? G :') + cprint(' (PP) == N-1 ? H :') + cprint(' &X[((PP)-2)*3]') + cprintraw(')') + for ai in range(0, len(abcd)): - gen_point_index_macro(abcd[ai], 'X', '(P%+d) * 3' % (ai - 2)) + cprintraw('#define %s POINT(P%+d)' % (abcd[ai], ai)) + gen_point_coords_macro(abcd[ai]) - cprint('#define E_CALCULATE_MID') - cassign(cost_ABCD,'d','dtmp_mid') +def gen_calculate_FG(): + cprint('#define CALCULAGE_F_G') + cassign(E,'E','tmp_E') + cassign(E,'F','tmp_F') -def gen_e_calculate(): - cprint('#define E_CALCULATE_MID') - cprint('if (P==0) ' - cassign(cost_ABCD,'d','dtmp_mid') +def gen_calculate_cost(): + cprint('#define CALCULATE_COST') + cassign(cost_ABCD,'P_cost','tmp_P_cost') + cprintraw('') def gen_f_populate(): cprint('#define F_POPULATE') @@ -174,8 +183,9 @@ def gen_j_populate(): def gen_C(): gen_misc() - gen_abcd_ijk_macros() - gen_e_calculate() + gen_point_references() + #gen_calculate_FG() + gen_calculate_cost() def get_python(): # https://github.com/sympy/sympy/issues/13642