[BACK]Return to integer_lifting_functions.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Root_Counts / Stalift

Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Stalift/integer_lifting_functions.adb, Revision 1.1

1.1     ! maekawa     1: with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
        !             2: with Standard_Complex_Numbers;           use Standard_Complex_Numbers;
        !             3: with Standard_Complex_Vectors;
        !             4: with Standard_Random_Numbers;
        !             5:
        !             6: package body Integer_Lifting_Functions is
        !             7:
        !             8: -- AUXILIARIES :
        !             9:
        !            10:   function Convert ( v : Standard_Integer_Vectors.Vector )
        !            11:                    return Standard_Complex_Vectors.Vector is
        !            12:
        !            13:   -- DESCRIPTION :
        !            14:   --   Converts the given vector into a vector with complex entries.
        !            15:
        !            16:     res : Standard_Complex_Vectors.Vector(v'range);
        !            17:
        !            18:   begin
        !            19:     for i in v'range loop
        !            20:       res(i) := Create(double_float(v(i)));
        !            21:     end loop;
        !            22:     return res;
        !            23:   end Convert;
        !            24:
        !            25:   function Random_Vector ( m : natural; low,upp : integer ) return Vector is
        !            26:
        !            27:   -- DESCRIPTION :
        !            28:   --   Returns a random vector of range 1..m of randomly generated integer
        !            29:   --   values between low and upp.
        !            30:
        !            31:     res : Vector(1..m);
        !            32:
        !            33:   begin
        !            34:     for k in res'range loop
        !            35:       res(k) := Standard_Random_Numbers.Random(low,upp);
        !            36:     end loop;
        !            37:     return res;
        !            38:   end Random_Vector;
        !            39:
        !            40:   function Random ( vec : Standard_Integer_Vectors.Vector ) return integer is
        !            41:
        !            42:   -- DESCRIPTION :
        !            43:   --   Returns a random number from the given vector.
        !            44:
        !            45:     index : integer := Standard_Random_Numbers.Random(vec'first,vec'last);
        !            46:
        !            47:   begin
        !            48:     return vec(index);
        !            49:   end Random;
        !            50:
        !            51: -- LINEAR LIFTING :
        !            52:
        !            53:   function Linear_Lift ( lf,v : Vector ) return Vector is
        !            54:
        !            55:     res : Vector(v'first..v'last+1);
        !            56:
        !            57:   begin
        !            58:     res(v'range) := v;
        !            59:     res(res'last) := lf*v;
        !            60:     return res;
        !            61:   end Linear_Lift;
        !            62:
        !            63:   function Linear_Lift ( lf : Vector; l : List ) return List is
        !            64:
        !            65:     res,res_last : List;
        !            66:     tmp : List := l;
        !            67:
        !            68:   begin
        !            69:     while not Is_Null(tmp) loop
        !            70:       Append(res,res_last,Linear_Lift(lf,Head_Of(tmp).all));
        !            71:       tmp := Tail_Of(tmp);
        !            72:     end loop;
        !            73:     return res;
        !            74:   end Linear_Lift;
        !            75:
        !            76:   function Linear_Lift ( lf : VecVec;
        !            77:                          l : Array_of_Lists ) return Array_of_Lists is
        !            78:
        !            79:     res : Array_of_Lists(l'range);
        !            80:
        !            81:   begin
        !            82:     for i in res'range loop
        !            83:       res(i) := Linear_Lift(lf(i).all,l(i));
        !            84:     end loop;
        !            85:     return res;
        !            86:   end Linear_Lift;
        !            87:
        !            88: -- POLYNOMIAL LIFTING :
        !            89:
        !            90:   function Polynomial_Lift ( lf : Poly; v : Vector ) return Vector is
        !            91:
        !            92:     res : Vector(v'first..v'last+1);
        !            93:
        !            94:   begin
        !            95:     res(v'range) := v;
        !            96:     res(res'last) := integer(REAL_PART(Eval(lf,Convert(v))));
        !            97:     return res;
        !            98:   end Polynomial_Lift;
        !            99:
        !           100:   function Polynomial_Lift ( lf : Eval_Poly; v : Vector ) return Vector is
        !           101:
        !           102:     res : Vector(v'first..v'last+1);
        !           103:
        !           104:   begin
        !           105:     res(v'range) := v;
        !           106:     res(res'last) := integer(REAL_PART(Eval(lf,Convert(v))));
        !           107:     return res;
        !           108:   end Polynomial_Lift;
        !           109:
        !           110:   function Polynomial_Lift ( lf : Poly; l : List ) return List is
        !           111:
        !           112:     res : List;
        !           113:     elf : Eval_Poly := Create(lf);
        !           114:
        !           115:   begin
        !           116:     res := Polynomial_Lift(elf,l);
        !           117:     Clear(elf);
        !           118:     return res;
        !           119:   end Polynomial_Lift;
        !           120:
        !           121:   function Polynomial_Lift ( lf : Eval_Poly; l : List ) return List is
        !           122:
        !           123:     res,res_last : List;
        !           124:     tmp : List := l;
        !           125:
        !           126:   begin
        !           127:     while not Is_Null(tmp) loop
        !           128:       Append(res,res_last,Polynomial_Lift(lf,Head_Of(tmp).all));
        !           129:       tmp := Tail_Of(tmp);
        !           130:     end loop;
        !           131:     return res;
        !           132:   end Polynomial_Lift;
        !           133:
        !           134:   function Polynomial_Lift ( lf : Poly_Sys; l : Array_of_Lists )
        !           135:                            return Array_of_Lists is
        !           136:
        !           137:     res : Array_of_Lists(l'range);
        !           138:     elf : Eval_Poly_Sys(lf'range) := Create(lf);
        !           139:
        !           140:   begin
        !           141:     res := Polynomial_Lift(elf,l);
        !           142:     Clear(elf);
        !           143:     return res;
        !           144:   end Polynomial_Lift;
        !           145:
        !           146:   function Polynomial_Lift ( lf : Eval_Poly_Sys; l : Array_of_Lists )
        !           147:                            return Array_of_Lists is
        !           148:
        !           149:     res : Array_of_Lists(l'range);
        !           150:
        !           151:   begin
        !           152:     for i in res'range loop
        !           153:       res(i) := Polynomial_Lift(lf(i),l(i));
        !           154:     end loop;
        !           155:     return res;
        !           156:   end Polynomial_Lift;
        !           157:
        !           158: -- RANDOM LIFTING :
        !           159:
        !           160:   function Random_Lift ( lflow,lfupp : integer; v : Vector ) return Vector is
        !           161:
        !           162:     res : Vector(v'first..v'last+1);
        !           163:
        !           164:   begin
        !           165:     res(v'range) := v;
        !           166:     res(res'last) := Standard_Random_Numbers.Random(lflow,lfupp);
        !           167:     return res;
        !           168:   end Random_Lift;
        !           169:
        !           170:   function Random_Lift ( lflow,lfupp : integer; l : List ) return List is
        !           171:
        !           172:     res,res_last : List;
        !           173:     tmp : List := l;
        !           174:
        !           175:   begin
        !           176:     while not Is_Null(tmp) loop
        !           177:       Append(res,res_last,Random_Lift(lflow,lfupp,Head_Of(tmp).all));
        !           178:       tmp := Tail_Of(tmp);
        !           179:     end loop;
        !           180:     return res;
        !           181:   end Random_Lift;
        !           182:
        !           183:   function Random_Lift ( lflow,lfupp : Vector; l : Array_of_Lists )
        !           184:                        return Array_of_Lists is
        !           185:
        !           186:     res : Array_of_Lists(l'range);
        !           187:
        !           188:   begin
        !           189:     for i in res'range loop
        !           190:       res(i) := Random_Lift(lflow(i),lfupp(i),l(i));
        !           191:     end loop;
        !           192:     return res;
        !           193:   end Random_Lift;
        !           194:
        !           195: -- RANDOM LINEAR LIFTING :
        !           196:
        !           197:   function Random_Linear_Lift ( lflow,lfupp : integer; v : Vector )
        !           198:                               return Vector is
        !           199:
        !           200:     lf : Vector(v'range) := Random_Vector(v'last,lflow,lfupp);
        !           201:
        !           202:   begin
        !           203:     return Linear_Lift(lf,v);
        !           204:   end Random_Linear_Lift;
        !           205:
        !           206:   function Random_Linear_Lift ( lflow,lfupp : integer; l : List )
        !           207:                               return List is
        !           208:   begin
        !           209:     if Is_Null(l)
        !           210:      then return l;
        !           211:      else declare
        !           212:             n : constant natural := Head_Of(l)'length;
        !           213:             lf : Vector(Head_Of(l)'range) := Random_Vector(n,lflow,lfupp);
        !           214:           begin
        !           215:             return Linear_Lift(lf,l);
        !           216:           end;
        !           217:     end if;
        !           218:   end Random_Linear_Lift;
        !           219:
        !           220:   function Random_Linear_Lift ( lflow,lfupp : Vector; l : Array_of_Lists )
        !           221:                               return Array_of_Lists is
        !           222:
        !           223:     res : Array_of_Lists(l'range);
        !           224:
        !           225:   begin
        !           226:     for i in res'range loop
        !           227:       res(i) := Random_Linear_Lift(lflow(i),lfupp(i),l(i));
        !           228:     end loop;
        !           229:     return res;
        !           230:   end Random_Linear_Lift;
        !           231:
        !           232: -- POINT-WISE LIFTING :
        !           233:
        !           234:   function Point_Lift ( lf : integer; v : Vector ) return Vector is
        !           235:
        !           236:     res : Vector(v'first..v'last+1);
        !           237:
        !           238:   begin
        !           239:     res(v'range) := v;
        !           240:     res(res'last) := lf;
        !           241:     return res;
        !           242:   end Point_Lift;
        !           243:
        !           244:   function Point_Lift ( lf : Vector; l : List ) return List is
        !           245:
        !           246:     res,res_last : List;
        !           247:     tmp : List := l;
        !           248:     ind : integer := lf'first;
        !           249:
        !           250:   begin
        !           251:     while not Is_Null(tmp) loop
        !           252:       Append(res,res_last,Point_Lift(lf(ind),Head_Of(tmp).all));
        !           253:       ind := ind + 1;
        !           254:       tmp := Tail_Of(tmp);
        !           255:     end loop;
        !           256:     return res;
        !           257:   end Point_Lift;
        !           258:
        !           259:   function Point_Lift ( lf : VecVec;
        !           260:                         l : Array_of_Lists ) return Array_of_Lists is
        !           261:
        !           262:     res : Array_of_Lists(l'range);
        !           263:
        !           264:   begin
        !           265:     for i in res'range loop
        !           266:       res(i) := Point_Lift(lf(i).all,l(i));
        !           267:     end loop;
        !           268:     return res;
        !           269:   end Point_Lift;
        !           270:
        !           271: end Integer_Lifting_Functions;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>