1------------------------------------------------------------------------------ 2-- -- 3-- GNAT RUN-TIME COMPONENTS -- 4-- -- 5-- ADA.NUMERICS.GENERIC_COMPLEX_ARRAYS -- 6-- -- 7-- S p e c -- 8-- -- 9-- This specification is derived from the Ada Reference Manual for use with -- 10-- GNAT. In accordance with the copyright of that document, you can freely -- 11-- copy and modify this specification, provided that if you redistribute a -- 12-- modified version, any changes that you have made are clearly indicated. -- 13-- -- 14------------------------------------------------------------------------------ 15 16with Ada.Numerics.Generic_Real_Arrays, Ada.Numerics.Generic_Complex_Types; 17 18generic 19 with package Real_Arrays is new Ada.Numerics.Generic_Real_Arrays (<>); 20 use Real_Arrays; 21 with package Complex_Types is new Ada.Numerics.Generic_Complex_Types (Real); 22 use Complex_Types; 23package Ada.Numerics.Generic_Complex_Arrays is 24 pragma Pure (Generic_Complex_Arrays); 25 26 -- Types 27 28 type Complex_Vector is array (Integer range <>) of Complex; 29 type Complex_Matrix is 30 array (Integer range <>, Integer range <>) of Complex; 31 32 -- Subprograms for Complex_Vector types 33 -- Complex_Vector selection, conversion and composition operations 34 35 function Re (X : Complex_Vector) return Real_Vector; 36 function Im (X : Complex_Vector) return Real_Vector; 37 38 procedure Set_Re (X : in out Complex_Vector; Re : Real_Vector); 39 procedure Set_Im (X : in out Complex_Vector; Im : Real_Vector); 40 41 function Compose_From_Cartesian 42 (Re : Real_Vector) return Complex_Vector; 43 function Compose_From_Cartesian 44 (Re, Im : Real_Vector) return Complex_Vector; 45 46 function Modulus (X : Complex_Vector) return Real_Vector; 47 function "abs" (Right : Complex_Vector) return Real_Vector renames Modulus; 48 function Argument (X : Complex_Vector) return Real_Vector; 49 50 function Argument 51 (X : Complex_Vector; 52 Cycle : Real'Base) return Real_Vector; 53 54 function Compose_From_Polar 55 (Modulus, Argument : Real_Vector) return Complex_Vector; 56 57 function Compose_From_Polar 58 (Modulus, Argument : Real_Vector; 59 Cycle : Real'Base) return Complex_Vector; 60 61 -- Complex_Vector arithmetic operations 62 63 function "+" (Right : Complex_Vector) return Complex_Vector; 64 function "-" (Right : Complex_Vector) return Complex_Vector; 65 function Conjugate (X : Complex_Vector) return Complex_Vector; 66 function "+" (Left, Right : Complex_Vector) return Complex_Vector; 67 function "-" (Left, Right : Complex_Vector) return Complex_Vector; 68 function "*" (Left, Right : Complex_Vector) return Complex; 69 function "abs" (Right : Complex_Vector) return Real'Base; 70 71 -- Mixed Real_Vector and Complex_Vector arithmetic operations 72 73 function "+" 74 (Left : Real_Vector; 75 Right : Complex_Vector) return Complex_Vector; 76 77 function "+" 78 (Left : Complex_Vector; 79 Right : Real_Vector) return Complex_Vector; 80 81 function "-" 82 (Left : Real_Vector; 83 Right : Complex_Vector) return Complex_Vector; 84 85 function "-" 86 (Left : Complex_Vector; 87 Right : Real_Vector) return Complex_Vector; 88 89 function "*" (Left : Real_Vector; Right : Complex_Vector) return Complex; 90 function "*" (Left : Complex_Vector; Right : Real_Vector) return Complex; 91 92 -- Complex_Vector scaling operations 93 94 function "*" 95 (Left : Complex; 96 Right : Complex_Vector) return Complex_Vector; 97 98 function "*" 99 (Left : Complex_Vector; 100 Right : Complex) return Complex_Vector; 101 102 function "/" 103 (Left : Complex_Vector; 104 Right : Complex) return Complex_Vector; 105 106 function "*" 107 (Left : Real'Base; 108 Right : Complex_Vector) return Complex_Vector; 109 110 function "*" 111 (Left : Complex_Vector; 112 Right : Real'Base) return Complex_Vector; 113 114 function "/" 115 (Left : Complex_Vector; 116 Right : Real'Base) return Complex_Vector; 117 118 -- Other Complex_Vector operations 119 120 function Unit_Vector 121 (Index : Integer; 122 Order : Positive; 123 First : Integer := 1) return Complex_Vector; 124 125 -- Subprograms for Complex_Matrix types 126 127 -- Complex_Matrix selection, conversion and composition operations 128 129 function Re (X : Complex_Matrix) return Real_Matrix; 130 function Im (X : Complex_Matrix) return Real_Matrix; 131 132 procedure Set_Re (X : in out Complex_Matrix; Re : Real_Matrix); 133 procedure Set_Im (X : in out Complex_Matrix; Im : Real_Matrix); 134 135 function Compose_From_Cartesian (Re : Real_Matrix) return Complex_Matrix; 136 137 function Compose_From_Cartesian 138 (Re, Im : Real_Matrix) return Complex_Matrix; 139 140 function Modulus (X : Complex_Matrix) return Real_Matrix; 141 function "abs" (Right : Complex_Matrix) return Real_Matrix renames Modulus; 142 143 function Argument (X : Complex_Matrix) return Real_Matrix; 144 145 function Argument 146 (X : Complex_Matrix; 147 Cycle : Real'Base) return Real_Matrix; 148 149 function Compose_From_Polar 150 (Modulus, Argument : Real_Matrix) return Complex_Matrix; 151 152 function Compose_From_Polar 153 (Modulus : Real_Matrix; 154 Argument : Real_Matrix; 155 Cycle : Real'Base) return Complex_Matrix; 156 157 -- Complex_Matrix arithmetic operations 158 159 function "+" (Right : Complex_Matrix) return Complex_Matrix; 160 function "-" (Right : Complex_Matrix) return Complex_Matrix; 161 162 function Conjugate (X : Complex_Matrix) return Complex_Matrix; 163 function Transpose (X : Complex_Matrix) return Complex_Matrix; 164 165 function "+" (Left, Right : Complex_Matrix) return Complex_Matrix; 166 function "-" (Left, Right : Complex_Matrix) return Complex_Matrix; 167 function "*" (Left, Right : Complex_Matrix) return Complex_Matrix; 168 function "*" (Left, Right : Complex_Vector) return Complex_Matrix; 169 170 function "*" 171 (Left : Complex_Vector; 172 Right : Complex_Matrix) return Complex_Vector; 173 174 function "*" 175 (Left : Complex_Matrix; 176 Right : Complex_Vector) return Complex_Vector; 177 178 -- Mixed Real_Matrix and Complex_Matrix arithmetic operations 179 180 function "+" 181 (Left : Real_Matrix; 182 Right : Complex_Matrix) return Complex_Matrix; 183 184 function "+" 185 (Left : Complex_Matrix; 186 Right : Real_Matrix) return Complex_Matrix; 187 188 function "-" 189 (Left : Real_Matrix; 190 Right : Complex_Matrix) return Complex_Matrix; 191 192 function "-" 193 (Left : Complex_Matrix; 194 Right : Real_Matrix) return Complex_Matrix; 195 196 function "*" 197 (Left : Real_Matrix; 198 Right : Complex_Matrix) return Complex_Matrix; 199 200 function "*" 201 (Left : Complex_Matrix; 202 Right : Real_Matrix) return Complex_Matrix; 203 204 function "*" 205 (Left : Real_Vector; 206 Right : Complex_Vector) return Complex_Matrix; 207 208 function "*" 209 (Left : Complex_Vector; 210 Right : Real_Vector) return Complex_Matrix; 211 212 function "*" 213 (Left : Real_Vector; 214 Right : Complex_Matrix) return Complex_Vector; 215 216 function "*" 217 (Left : Complex_Vector; 218 Right : Real_Matrix) return Complex_Vector; 219 220 function "*" 221 (Left : Real_Matrix; 222 Right : Complex_Vector) return Complex_Vector; 223 224 function "*" 225 (Left : Complex_Matrix; 226 Right : Real_Vector) return Complex_Vector; 227 228 -- Complex_Matrix scaling operations 229 230 function "*" 231 (Left : Complex; 232 Right : Complex_Matrix) return Complex_Matrix; 233 234 function "*" 235 (Left : Complex_Matrix; 236 Right : Complex) return Complex_Matrix; 237 238 function "/" 239 (Left : Complex_Matrix; 240 Right : Complex) return Complex_Matrix; 241 242 function "*" 243 (Left : Real'Base; 244 Right : Complex_Matrix) return Complex_Matrix; 245 246 function "*" 247 (Left : Complex_Matrix; 248 Right : Real'Base) return Complex_Matrix; 249 250 function "/" 251 (Left : Complex_Matrix; 252 Right : Real'Base) return Complex_Matrix; 253 254 -- Complex_Matrix inversion and related operations 255 256 function Solve 257 (A : Complex_Matrix; 258 X : Complex_Vector) return Complex_Vector; 259 260 function Solve (A, X : Complex_Matrix) return Complex_Matrix; 261 262 function Inverse (A : Complex_Matrix) return Complex_Matrix; 263 264 function Determinant (A : Complex_Matrix) return Complex; 265 266 -- Eigenvalues and vectors of a Hermitian matrix 267 268 function Eigenvalues (A : Complex_Matrix) return Real_Vector; 269 270 procedure Eigensystem 271 (A : Complex_Matrix; 272 Values : out Real_Vector; 273 Vectors : out Complex_Matrix); 274 275 -- Other Complex_Matrix operations 276 277 function Unit_Matrix 278 (Order : Positive; 279 First_1, First_2 : Integer := 1) return Complex_Matrix; 280 281end Ada.Numerics.Generic_Complex_Arrays; 282