Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Symmetry/symmetric_bkk_bound_solvers.adb, Revision 1.1.1.1
1.1 maekawa 1: with Standard_Integer_Vectors; use Standard_Integer_Vectors;
2: with Standard_Floating_Vectors;
3: with Power_Lists; use Power_Lists;
4: with Standard_Complex_Laur_Systems; use Standard_Complex_Laur_Systems;
5: with Standard_Poly_Laur_Convertors; use Standard_Poly_Laur_Convertors;
6: with Integer_Lifting_Utilities; use Integer_Lifting_Utilities;
7: with Arrays_of_Integer_Vector_Lists; use Arrays_of_Integer_Vector_Lists;
8: with Integer_Mixed_Subdivisions; use Integer_Mixed_Subdivisions;
9: with Integer_Mixed_Subdivisions_io; use Integer_Mixed_Subdivisions_io;
10: with Mixed_Coherent_Subdivisions; use Mixed_Coherent_Subdivisions;
11: with Mixed_Volume_Computation; use Mixed_Volume_Computation;
12: with Symmetric_Polyhedral_Continuation; use Symmetric_Polyhedral_Continuation;
13:
14: package body Symmetric_BKK_Bound_Solvers is
15:
16: function Symmetric_BKK_Solve ( p : Poly_Sys; sign : boolean )
17: return Solution_List is
18:
19: n : constant natural := p'length;
20: points : Array_of_Lists(p'range) := Create(p);
21: sols : Solution_List;
22: mix,per : Link_to_Vector;
23: mixsub : Mixed_Subdivision;
24: lp,pp : Laur_Sys(p'range);
25: low : constant Vector := (1..n => 0);
26: upp : constant Vector := Adaptive_Lifting(points);
27:
28: begin
29: Compute_Mixture(points,mix,per); Clear(per);
30: declare
31: lifted : Array_of_Lists(mix'range);
32: nbsucc,nbfail : Standard_Floating_Vectors.Vector(mix'range)
33: := (mix'range => 0.0);
34: file : file_type;
35: begin
36: Mixed_Coherent_Subdivision
37: (n,mix.all,points,false,low,upp,lifted,nbsucc,nbfail,mixsub);
38: pp := Polynomial_to_Laurent_System(p);
39: lp := Perform_Lifting(n,mix.all,lifted,pp);
40: Create(file,out_file,"/tmp/brol");
41: sols := Symmetric_Mixed_Solve(file,sign,lp,mixsub,n,mix.all);
42: Deep_Clear(lifted);
43: end;
44: Clear(pp); Clear(lp);
45: Deep_Clear(points);
46: Clear(mixsub);
47: return sols;
48: end Symmetric_BKK_Solve;
49:
50: function Symmetric_BKK_Solve ( p : Poly_Sys; grp : List_of_Permutations;
51: sign : boolean ) return Solution_List is
52:
53: n : constant natural := p'length;
54: points : Array_of_Lists(p'range) := Create(p);
55: sols : Solution_List;
56: mix,per : Link_to_Vector;
57: mixsub : Mixed_Subdivision;
58: lp,pp : Laur_Sys(p'range);
59: low : constant Vector := (1..n => 0);
60: upp : constant Vector := Adaptive_Lifting(points);
61:
62: begin
63: Compute_Mixture(points,mix,per); Clear(per);
64: declare
65: lifted : Array_of_Lists(mix'range);
66: nbsucc,nbfail : Standard_Floating_Vectors.Vector(mix'range)
67: := (mix'range => 0.0);
68: file : file_type;
69: begin
70: Mixed_Coherent_Subdivision
71: (n,mix.all,points,false,low,upp,lifted,nbsucc,nbfail,mixsub);
72: pp := Polynomial_to_Laurent_System(p);
73: lp := Perform_Lifting(n,mix.all,lifted,pp);
74: Create(file,out_file,"/tmp/brol");
75: sols := Symmetric_Mixed_Solve(file,grp,sign,lp,mixsub,n,mix.all);
76: Deep_Clear(lifted);
77: end;
78: Clear(pp); Clear(lp);
79: Deep_Clear(points);
80: Clear(mixsub);
81: return sols;
82: end Symmetric_BKK_Solve;
83:
84: function Symmetric_BKK_Solve
85: ( file : file_type; p : Poly_Sys; sign : boolean)
86: return Solution_List is
87:
88: n : constant natural := p'length;
89: points : Array_of_Lists(p'range) := Create(p);
90: sols : Solution_List;
91: mix,per : Link_to_Vector;
92: mixsub : Mixed_Subdivision;
93: lp,pp : Laur_Sys(p'range);
94: low : constant Vector := (1..n => 0);
95: upp : constant Vector := Adaptive_Lifting(points);
96:
97: begin
98: Compute_Mixture(points,mix,per); Clear(per);
99: declare
100: lifted : Array_of_Lists(mix'range);
101: nbsucc,nbfail : Standard_Floating_Vectors.Vector(mix'range)
102: := (mix'range => 0.0);
103: begin
104: Mixed_Coherent_Subdivision
105: (n,mix.all,points,false,low,upp,lifted,nbsucc,nbfail,mixsub);
106: put_line(file,"**** THE SYMMETRIC MIXED SUBDIVISION ****");
107: put(file,n,mix.all,mixsub);
108: pp := Polynomial_to_Laurent_System(p);
109: lp := Perform_Lifting(n,mix.all,lifted,pp);
110: new_line(file); put_line(file,"**** SYMMETRIC MIXED SOLVE ****");
111: sols := Symmetric_Mixed_Solve(file,sign,lp,mixsub,n,mix.all);
112: Deep_Clear(lifted);
113: end;
114: Clear(pp); Clear(lp);
115: Deep_Clear(points);
116: Clear(mixsub);
117: return sols;
118: end Symmetric_BKK_Solve;
119:
120: function Symmetric_BKK_Solve ( file : file_type; p : Poly_Sys;
121: grp : List_of_Permutations; sign : boolean )
122: return Solution_List is
123:
124: n : constant natural := p'length;
125: points : Array_of_Lists(p'range) := Create(p);
126: sols : Solution_List;
127: mix,per : Link_to_Vector;
128: mixsub : Mixed_Subdivision;
129: lp,pp : Laur_Sys(p'range);
130: low : constant Vector := (1..n => 0);
131: upp : constant Vector := Adaptive_Lifting(points);
132:
133: begin
134: Compute_Mixture(points,mix,per); Clear(per);
135: declare
136: lifted : Array_of_Lists(mix'range);
137: nbsucc,nbfail : Standard_Floating_Vectors.Vector(mix'range)
138: := (mix'range => 0.0);
139: begin
140: Mixed_Coherent_Subdivision
141: (n,mix.all,points,false,low,upp,lifted,nbsucc,nbfail,mixsub);
142: put_line(file,"**** THE SYMMETRIC MIXED SUBDIVISION ****");
143: put(file,n,mix.all,mixsub);
144: pp := Polynomial_to_Laurent_System(p);
145: lp := Perform_Lifting(n,mix.all,lifted,pp);
146: new_line(file); put_line(file,"**** SYMMETRIC MIXED SOLVE ****");
147: sols := Symmetric_Mixed_Solve(file,grp,sign,lp,mixsub,n,mix.all);
148: Deep_Clear(lifted);
149: end;
150: Clear(pp); Clear(lp);
151: Deep_Clear(points);
152: Clear(mixsub);
153: return sols;
154: end Symmetric_BKK_Solve;
155:
156: end Symmetric_BKK_bound_Solvers;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>