Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Symmetry/symmetric_bkk_bound_solvers.adb, Revision 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>