chiark / gitweb /
curveopt: symbolic: wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Apr 2018 18:42:55 +0000 (19:42 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Apr 2018 18:42:55 +0000 (19:42 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
symbolic.py

index f12a96d18d9496645394195604ef286abb1d7f61..06ef2c6937f485603183389036b2ae73a0450301 100644 (file)
@@ -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