1import os.path 2import numpy as np 3import itertools 4import Tools 5import numpy.linalg 6import math 7import scipy.linalg 8import QR 9 10def cartesian(*somelists): 11 r=[] 12 for element in itertools.product(*somelists): 13 r.append(element) 14 return(r) 15 16def swaprow(a,k,j): 17 tmp = np.copy(a[j,:]) 18 a[j,:] = np.copy(a[k,:]) 19 a[k,:] = tmp 20 return(a) 21 22def swapcol(a,k,j): 23 tmp = np.copy(a[:,j]) 24 a[:,j] = np.copy(a[:,k]) 25 a[:,k] = tmp 26 return(a) 27 28def ldlt(src): 29 # Algorithm 4.2.2 in Golub and Van Loan 30 ma = np.copy(src) 31 fullRank = True 32 33 34 piv=np.zeros(len(ma),dtype=int) 35 36 n = len(ma) 37 38 for k in range(0,n): 39 piv[k] = k 40 41 for k in range(0,n): 42 d=np.diagonal(ma) 43 j = np.argmax(d[k:]) + k 44 piv[k] = j 45 46 ma = swaprow(ma,k,j) 47 ma = swapcol(ma,k,j) 48 49 alpha = ma[k,k] 50 v = np.copy(ma[k+1:,k]) 51 52 if abs(alpha) < 1.0e-18: 53 fullRank = False 54 break 55 56 ma[k+1:,k] = v / alpha 57 58 v = v.reshape((n-k-1,1)) 59 60 ma[k+1:,k+1:] = ma[k+1:,k+1:] - np.matmul(v , np.transpose(v)) / alpha 61 62 63 if not fullRank: 64 ma[:,k:] = 0.0 65 diags=(np.array(range(0,k),dtype=int),np.array(range(0,k),dtype=int)) 66 else: 67 diags=(np.array(range(0,k+1),dtype=int),np.array(range(0,k+1),dtype=int)) 68 69 ll=np.tril(ma) 70 71 ll[diags] = 1.0 72 d=np.diag(np.diagonal(ma)) 73 74 return(ll,d,piv) 75 76# Validate the Python implementation of LDLT 77def valid(src,ll,d,piv): 78 n = len(src) 79 p=np.identity(n) 80 for k in range(0,n): 81 p = swaprow(p,k,piv[k]) 82 83 a = np.matmul(p,np.matmul(src,np.transpose(p))) 84 t = np.matmul(ll,np.matmul(d,np.transpose(ll))) 85 r = a - t 86 r[abs(r)<1e-10]=0.0 87 return(np.all(r == 0.0)) 88 89# Those patterns are used for tests and benchmarks. 90# For tests, there is the need to add tests for saturation 91 92NBA = 47 93NBI = 47 94NBB = 47 95 96def randComplex(nb): 97 data = np.random.randn(2*nb) 98 data = Tools.normalize(data) 99 data_comp = data.view(dtype=np.complex128) 100 return(data_comp) 101 102def asReal(a): 103 #return(a.view(dtype=np.float64)) 104 return(a.reshape(np.size(a)).view(dtype=np.float64)) 105 106def writeBinaryTests(config,format): 107 # For benchmarks 108 NBSAMPLESA=NBA*NBI 109 NBSAMPLESB=NBI*NBB 110 111 data1=np.random.randn(NBSAMPLESA) 112 data2=np.random.randn(NBSAMPLESB) 113 114 data1 = Tools.normalize(data1) 115 data2 = Tools.normalize(data2) 116 117 data1C=randComplex(NBSAMPLESA) 118 data2C=randComplex(NBSAMPLESB) 119 120 config.writeInput(1, data1,"InputA") 121 config.writeInput(1, data2,"InputB") 122 123 124 config.writeInput(1, asReal(data1C),"InputAC") 125 config.writeInput(1, asReal(data2C),"InputBC") 126 127 # For tests 128 NA=[1,2,3,4,Tools.loopnb(format,Tools.TAILONLY), 129 Tools.loopnb(format,Tools.BODYONLY), 130 Tools.loopnb(format,Tools.BODYANDTAIL) 131 ] 132 binarySizes = cartesian(NA,NA,NA) 133 134 dims=[] 135 for (a,b,c) in binarySizes: 136 dims.append(a) 137 dims.append(b) 138 dims.append(c) 139 # Two matrix shapes with a common dimension 140 config.writeInputS16(1, dims,"DimsBinary") 141 142 vals=[] 143 for (a,b,c) in binarySizes: 144 ma = np.copy(data1[0:a*b]).reshape(a,b) 145 mb = np.copy(data2[0:b*c]).reshape(b,c) 146 r = np.matmul(ma , mb) 147 r = list(r.reshape(a*c)) 148 vals = vals + r 149 config.writeReference(1, vals,"RefMul") 150 151 152 153 vals=[] 154 for (a,b,c) in binarySizes: 155 ma = np.copy(data1C[0:a*b]).reshape(a,b) 156 mb = np.copy(data2C[0:b*c]).reshape(b,c) 157 r = np.matmul(ma , mb) 158 r = r.reshape(a*c) 159 vals = vals + list(asReal(r)) 160 config.writeReference(1, vals,"RefCmplxMul") 161 162 163 164def getInvertibleMatrix(d): 165 m = list(np.identity(d)) 166 if d == 1: 167 m=[[0.5]] 168 if d == 2: 169 c = math.cos(math.pi/4.0) 170 s = math.sin(math.pi/4.0) 171 m=[[c,s],[-s,c]] 172 if d == 3: 173 m=[[0.804738, -0.310617, 0.505879], [0.505879, 174 0.804738, -0.310617], [-0.310617, 0.505879, 0.804738]] 175 if d == 4: 176 m = [[1.0, 2.0, 3.0, 4.0], [2.0, 4.0, 5.0, 6.0], 177 [3.0, 5.0, 9.0, 10.0], [4.0, 6.0, 10.0, 16.0]] 178 if d == 7: 179 m = [[0.978575, 0.330011, 0.951751, 0.304936, 0.924631, 0.502005, 180 0.235223], [0.185314, 0.46862, 0.955398, 0.970953, 0.637389, 181 0.619818, 0.86799], [0.380902, 0.783701, 0.865756, 0.895405, 182 0.835417, 0.85535, 0.403498], [0.641836, 0.0598755, 0.625912, 183 0.0341266, 0.0864951, 0.483158, 0.636098], [0.178972, 0.22758, 184 0.0749739, 0.379663, 0.937258, 0.834272, 0.132251], [0.314556, 185 0.456779, 0.999462, 0.904361, 0.110283, 0.380465, 0.529671], 186 [0.201637, 0.46826, 0.454319, 0.366638, 0.0510135, 0.190817, 187 0.633405]] 188 189 if d == 8: 190 m = [[0.395744, 0.623798, 0.885422, 0.95415, 0.310384, 0.257541, 191 0.631426, 0.424491], [0.130945, 0.799959, 0.133693, 0.479455, 192 0.519254, 0.381039, 0.617455, 0.748273], [0.146944, 0.928945, 193 0.430936, 0.508207, 0.829023, 0.358027, 0.999501, 0.851953], 194 [0.273895, 0.685898, 0.0436612, 0.295212, 0.467651, 0.0515567, 195 0.21037, 0.607475], [0.570295, 0.281109, 0.979219, 0.0947969, 196 0.319016, 0.398405, 0.349953, 0.710002], [0.431597, 0.447659, 197 0.0747669, 0.057063, 0.165648, 0.773106, 0.135765, 0.709327], 198 [0.873836, 0.292361, 0.00202529, 0.392942, 0.520183, 0.0528055, 199 0.797982, 0.613497], [0.509682, 0.0435791, 0.780526, 0.960582, 200 0.535914, 0.216113, 0.134108, 0.225859]] 201 202 if d == 9: 203 m = [[0.755852, 0.340631, 0.605526, 0.537246, 0.143948, 0.687846, 204 0.268281, 0.386295, 0.353232], [0.609042, 0.936894, 0.181201, 205 0.645537, 0.13917, 0.652976, 0.644303, 0.662152, 0.96534], [0.509686, 206 0.92073, 0.498896, 0.55082, 0.000144712, 0.401615, 0.201727, 207 0.173404, 0.819396], [0.59557, 0.0951646, 0.808087, 0.924452, 208 0.344354, 0.407628, 0.864402, 0.343841, 0.972509], [0.808242, 209 0.716188, 0.415476, 0.776073, 0.0787058, 0.58918, 0.689208, 0.217683, 210 0.416339], [0.222844, 0.0554775, 0.243336, 0.717625, 0.0876268, 211 0.675214, 0.143021, 0.714785, 0.889134], [0.557756, 0.477962, 212 0.198405, 0.0375076, 0.979124, 0.591693, 0.312652, 0.547007, 213 0.652892], [0.131816, 0.828592, 0.0919046, 0.518972, 0.236985, 214 0.881454, 0.452603, 0.946956, 0.591222], [0.247849, 0.977108, 215 0.898247, 0.603217, 0.285739, 0.274847, 0.674735, 0.822884, 0.698022]] 216 217 if d == 15: 218 m = [[0.704168, 0.735853, 0.718608, 0.345529, 0.372926, 0.999775, 219 0.213948, 0.285632, 0.104145, 0.983514, 0.868818, 0.0910197, 220 0.608084, 0.707854, 0.487163], [0.947226, 0.673498, 0.237701, 221 0.836599, 0.231559, 0.338391, 0.953575, 0.486207, 0.564667, 0.557885, 222 0.00428352, 0.141811, 0.154465, 0.319782, 0.67351], [0.80958, 223 0.627188, 0.710782, 0.543137, 0.0174399, 0.595749, 0.198717, 224 0.960726, 0.778845, 0.638545, 0.945916, 0.252322, 0.731209, 0.107328, 225 0.253252], [0.70236, 0.530564, 0.0692471, 0.157804, 0.0108356, 226 0.00440731, 0.283927, 0.656757, 0.289001, 0.209615, 0.531473, 227 0.566135, 0.973776, 0.279332, 0.128177], [0.633133, 0.128768, 228 0.798054, 0.248072, 0.132449, 0.949232, 0.169771, 0.871594, 0.438446, 229 0.752553, 0.213159, 0.674657, 0.179118, 0.86295, 0.4113], [0.459624, 230 0.25108, 0.133495, 0.263819, 0.364067, 0.121598, 0.941177, 0.4478, 231 0.76137, 0.808942, 0.595109, 0.0158944, 0.114498, 0.133303, 232 0.0481718], [0.944067, 0.183467, 0.337882, 0.634676, 0.755476, 233 0.743938, 0.212828, 0.439745, 0.303501, 0.72898, 0.488751, 0.281193, 234 0.516431, 0.111916, 0.988385], [0.291307, 0.536322, 0.35962, 235 0.920623, 0.854874, 0.870951, 0.872989, 0.818509, 0.908277, 0.73949, 236 0.300055, 0.764275, 0.402059, 0.566754, 0.342424], [0.756966, 237 0.900864, 0.292798, 0.980525, 0.721962, 0.535073, 0.963098, 0.833779, 238 0.212301, 0.919205, 0.660289, 0.0845472, 0.451864, 0.967737, 239 0.925576], [0.916924, 0.0972206, 0.957888, 0.477663, 0.337311, 240 0.825177, 0.788022, 0.443052, 0.395918, 0.0268603, 0.609435, 241 0.316042, 0.63184, 0.1178, 0.30361], [0.178104, 0.230357, 0.406283, 242 0.145941, 0.900963, 0.609335, 0.632824, 0.188488, 0.152927, 243 0.0261378, 0.221135, 0.41915, 0.456675, 0.265506, 0.481851], 244 [0.22369, 0.581627, 0.425035, 0.33178, 0.513339, 0.708294, 0.099494, 245 0.835452, 0.0808179, 0.479402, 0.79378, 0.891339, 0.385959, 0.161006, 246 0.161274], [0.385656, 0.167598, 0.73502, 0.314725, 0.354188, 247 0.324861, 0.995976, 0.260656, 0.184682, 0.797253, 0.430961, 0.396493, 248 0.877258, 0.31995, 0.701658], [0.0635893, 0.155534, 0.835969, 249 0.254897, 0.729172, 0.926734, 0.668843, 0.202983, 0.184749, 0.670001, 250 0.923212, 0.111826, 0.0408538, 0.977616, 0.269772], [0.202834, 251 0.541264, 0.217012, 0.150064, 0.435462, 0.0353857, 0.163042, 252 0.707387, 0.0329654, 0.096392, 0.781631, 0.0813801, 0.853276, 253 0.31651, 0.233685]] 254 if d == 16: 255 [[0.97936, 0.498105, 0.452618, 0.299761, 0.688624, 0.247212, \ 256 0.228337, 0.22905, 0.563815, 0.251998, 0.5238, 0.141223, 0.0980689, \ 257 0.79112, 0.771182, 0.890995], [0.0256181, 0.0377277, 0.575629, \ 258 0.648138, 0.926218, 0.803878, 0.620333, 0.325635, 0.587355, 0.041795, \ 259 0.934271, 0.0690131, 0.0240136, 0.800828, 0.522999, 0.374706], \ 260 [0.266977, 0.208028, 0.112878, 0.0389899, 0.658311, 0.205067, \ 261 0.244172, 0.0762778, 0.190575, 0.677312, 0.0682093, 0.367328, \ 262 0.0191464, 0.988968, 0.437477, 0.130622], [0.907823, 0.0116559, \ 263 0.614526, 0.447443, 0.0126975, 0.995496, 0.947676, 0.659996, \ 264 0.321547, 0.725415, 0.658426, 0.0243924, 0.0843519, 0.351748, \ 265 0.974332, 0.673381], [0.375012, 0.719626, 0.721219, 0.766905, \ 266 0.17065, 0.648905, 0.770983, 0.360008, 0.344226, 0.179633, 0.347905, \ 267 0.555561, 0.742615, 0.908389, 0.806959, 0.176078], [0.872167, \ 268 0.321839, 0.098607, 0.954515, 0.627286, 0.235082, 0.746179, 0.163606, \ 269 0.899323, 0.871471, 0.712448, 0.956971, 0.736687, 0.750702, 0.843348, \ 270 0.302435], [0.444862, 0.0644597, 0.765519, 0.518397, 0.765541, \ 271 0.900375, 0.201853, 0.490325, 0.721786, 0.893647, 0.774724, \ 272 0.0983631, 0.339887, 0.526084, 0.0786152, 0.515697], [0.438801, \ 273 0.226628, 0.125093, 0.886642, 0.617766, 0.71696, 0.473172, 0.640949, \ 274 0.67688, 0.676214, 0.453662, 0.345796, 0.608999, 0.904448, 0.0965741, \ 275 0.00461771], [0.467399, 0.292235, 0.0418646, 0.116632, 0.0766192, \ 276 0.269051, 0.411649, 0.0538381, 0.973959, 0.667106, 0.301662, \ 277 0.977206, 0.891751, 0.420267, 0.441334, 0.0896179], [0.249969, \ 278 0.672614, 0.623966, 0.609733, 0.320772, 0.39723, 0.845196, 0.653877, \ 279 0.0599186, 0.340188, 0.199787, 0.598104, 0.45664, 0.920485, 0.969439, \ 280 0.446555], [0.0932837, 0.0247635, 0.747644, 0.438759, 0.639154, \ 281 0.754049, 0.379433, 0.968655, 0.0452146, 0.208123, 0.252654, \ 282 0.261898, 0.608665, 0.145211, 0.395368, 0.799111], [0.697823, \ 283 0.382906, 0.456515, 0.262579, 0.284169, 0.881488, 0.860877, 0.155548, \ 284 0.537387, 0.804235, 0.311383, 0.183216, 0.677692, 0.829542, 0.406049, \ 285 0.860392], [0.467668, 0.385633, 0.654692, 0.841125, 0.178406, \ 286 0.668945, 0.369609, 0.809711, 0.454593, 0.632028, 0.605791, 0.643851, \ 287 0.787023, 0.285633, 0.832216, 0.30892], [0.303559, 0.704898, 0.61118, \ 288 0.435547, 0.173678, 0.788689, 0.319511, 0.648378, 0.635417, 0.125127, \ 289 0.310251, 0.800819, 0.4863, 0.924361, 0.308059, 0.952175], [0.449844, \ 290 0.215496, 0.257826, 0.556383, 0.259735, 0.197234, 0.0509903, 0.21474, \ 291 0.145085, 0.41288, 0.876758, 0.096721, 0.228955, 0.0152248, 0.126501, \ 292 0.28899], [0.336668, 0.580015, 0.932761, 0.989783, 0.667379, \ 293 0.798751, 0.587173, 0.445902, 0.041448, 0.311878, 0.0332857, \ 294 0.401984, 0.795049, 0.8222, 0.678648, 0.807558]] 295 if d == 17: 296 m = [[0.133335, 0.517058, 0.701105, 0.306717, 0.0991376, 0.00531119, \ 297 0.958215, 0.703452, 0.109332, 0.117755, 0.163908, 0.305222, 0.595706, \ 298 0.712064, 0.889725, 0.405096, 0.0855293], [0.77937, 0.764142, \ 299 0.230949, 0.102371, 0.192378, 0.407009, 0.677376, 0.520533, 0.811622, \ 300 0.982079, 0.418158, 0.242076, 0.273134, 0.366346, 0.615423, 0.767038, \ 301 0.388856], [0.657456, 0.769374, 0.111209, 0.832816, 0.636625, \ 302 0.00292606, 0.457253, 0.227427, 0.146904, 0.237357, 0.391302, 0.2303, \ 303 0.937593, 0.144985, 0.328774, 0.36934, 0.51035], [0.983251, 0.279937, \ 304 0.844802, 0.903298, 0.348192, 0.156749, 0.489659, 0.889335, 0.615883, \ 305 0.66777, 0.997259, 0.262593, 0.481978, 0.969208, 0.0267358, 0.190169, \ 306 0.510358], [0.386987, 0.176313, 0.605099, 0.612098, 0.479341, \ 307 0.148345, 0.596891, 0.339071, 0.656778, 0.353512, 0.479927, 0.742252, \ 308 0.570376, 0.722239, 0.637817, 0.0266415, 0.323902], [0.0382872, \ 309 0.711866, 0.424079, 0.789902, 0.59981, 0.598953, 0.463945, 0.631132, \ 310 0.434764, 0.749596, 0.255799, 0.0869052, 0.806549, 0.906938, \ 311 0.583024, 0.728984, 0.110368], [0.783597, 0.747879, 0.735447, \ 312 0.695983, 0.204768, 0.109041, 0.552302, 0.66833, 0.829247, 0.0531204, \ 313 0.247598, 0.994937, 0.807362, 0.719985, 0.234183, 0.566978, \ 314 0.327766], [0.983224, 0.90949, 0.276237, 0.534742, 0.681737, \ 315 0.652466, 0.848426, 0.769707, 0.13917, 0.784081, 0.966263, 0.492853, \ 316 0.177233, 0.411634, 0.620385, 0.344837, 0.877829], [0.230241, \ 317 0.732502, 0.626417, 0.369864, 0.411434, 0.00231683, 0.164025, \ 318 0.899565, 0.602661, 0.917313, 0.96369, 0.749923, 0.174551, 0.738964, \ 319 0.240355, 0.302181, 0.731165], [0.492266, 0.367882, 0.475643, \ 320 0.938073, 0.57225, 0.570115, 0.392919, 0.440847, 0.889683, 0.0749963, \ 321 0.820675, 0.0673754, 0.208015, 0.208484, 0.0223897, 0.388032, \ 322 0.105848], [0.498337, 0.204332, 0.935046, 0.71546, 0.0461249, \ 323 0.636579, 0.904695, 0.857191, 0.304475, 0.0944178, 0.272618, \ 324 0.598437, 0.504778, 0.00254614, 0.0227495, 0.883251, 0.819557], \ 325 [0.917979, 0.0625552, 0.84745, 0.339056, 0.19506, 0.606289, 0.958305, \ 326 0.138779, 0.275338, 0.367648, 0.806884, 0.648595, 0.847197, 0.357685, \ 327 0.162295, 0.962875, 0.0274199], [0.031272, 0.68129, 0.191706, \ 328 0.376588, 0.077411, 0.786152, 0.528892, 0.168522, 0.496011, \ 329 0.0528135, 0.229117, 0.232179, 0.64569, 0.0493392, 0.594895, \ 330 0.195047, 0.466139], [0.0846469, 0.680764, 0.320802, 0.153364, \ 331 0.877709, 0.880937, 0.721778, 0.940679, 0.687212, 0.131609, 0.587884, \ 332 0.699248, 0.272942, 0.526976, 0.303268, 0.545032, 0.915477], \ 333 [0.00113185, 0.273766, 0.645106, 0.915763, 0.362201, 0.970536, \ 334 0.853713, 0.0807933, 0.496775, 0.74697, 0.361887, 0.93802, 0.123652, \ 335 0.313722, 0.654343, 0.237378, 0.725082], [0.423648, 0.361588, \ 336 0.108125, 0.167796, 0.945988, 0.686343, 0.94361, 0.501885, 0.952198, \ 337 0.785797, 0.727547, 0.100525, 0.0696632, 0.0342614, 0.0566811, \ 338 0.0697371, 0.250538], [0.397104, 0.415814, 0.298294, 0.385464, \ 339 0.3696, 0.596503, 0.651478, 0.512156, 0.0903898, 0.824847, 0.856181, \ 340 0.758707, 0.723593, 0.897521, 0.489231, 0.552946, 0.435435]] 341 if d == 32: 342 m = [[0.00486175, 0.671512, 0.671229, 0.603438, 0.509858, 0.635903, \ 343 0.672983, 0.96238, 0.501158, 0.0766142, 0.378993, 0.128323, 0.979438, \ 344 0.848874, 0.746088, 0.182961, 0.295819, 0.599062, 0.0564427, \ 345 0.877226, 0.158201, 0.310007, 0.255376, 0.61497, 0.0439793, 0.211115, \ 346 0.60649, 0.539429, 0.601855, 0.459125, 0.130523, 0.00523878], \ 347 [0.337683, 0.00592341, 0.0341371, 0.00544369, 0.512848, 0.245626, \ 348 0.115845, 0.679194, 0.479485, 0.760685, 0.251599, 0.0456632, \ 349 0.423679, 0.79359, 0.278378, 0.875334, 0.413503, 0.211325, 0.408999, \ 350 0.729473, 0.323137, 0.81086, 0.0880499, 0.854478, 0.0673655, \ 351 0.961338, 0.560391, 0.112047, 0.709918, 0.375023, 0.136046, \ 352 0.744921], [0.638824, 0.807032, 0.368559, 0.437475, 0.391191, \ 353 0.487815, 0.294866, 0.948817, 0.0402009, 0.324887, 0.620699, \ 354 0.0677868, 0.630819, 0.587703, 0.923385, 0.393539, 0.450501, \ 355 0.579254, 0.0229916, 0.251207, 0.276373, 0.583127, 0.884949, \ 356 0.134654, 0.597067, 0.968417, 0.771328, 0.76235, 0.966834, 0.832444, \ 357 0.463516, 0.985571], [0.91913, 0.285539, 0.494593, 0.141851, \ 358 0.429374, 0.279873, 0.0602374, 0.241835, 0.120068, 0.517207, 0.77467, \ 359 0.148957, 0.311078, 0.638281, 0.754867, 0.919708, 0.865302, \ 360 0.0919983, 0.99489, 0.477339, 0.561301, 0.19076, 0.875394, 0.665173, \ 361 0.257375, 0.737282, 0.484776, 0.416522, 0.746236, 0.899974, 0.164366, \ 362 0.221188], [0.83354, 0.393181, 0.317211, 0.278821, 0.116465, \ 363 0.305508, 0.235513, 0.073043, 0.825076, 0.56938, 0.551798, 0.179343, \ 364 0.95083, 0.647773, 0.901178, 0.176792, 0.254499, 0.188447, 0.634042, \ 365 0.320702, 0.324266, 0.341313, 0.66288, 0.374912, 0.144847, 0.143202, \ 366 0.652035, 0.0252101, 0.0852716, 0.126889, 0.877229, 0.718062], \ 367 [0.413352, 0.129036, 0.104131, 0.698749, 0.0523534, 0.58054, 0.8425, \ 368 0.748314, 0.458127, 0.716553, 0.848332, 0.210169, 0.577707, \ 369 0.0823855, 0.0824533, 0.524593, 0.563235, 0.534768, 0.545148, \ 370 0.494946, 0.329187, 0.581969, 0.515833, 0.746702, 0.969672, 0.480806, \ 371 0.847425, 0.61117, 0.305932, 0.463121, 0.879455, 0.945384], \ 372 [0.822641, 0.593828, 0.278183, 0.332009, 0.0341548, 0.324217, \ 373 0.0218753, 0.436835, 0.618974, 0.772488, 0.674042, 0.484553, \ 374 0.0966171, 0.983133, 0.160891, 0.813557, 0.635934, 0.585081, \ 375 0.242585, 0.376284, 0.694645, 0.955019, 0.960159, 0.589983, 0.687797, \ 376 0.308842, 0.308321, 0.324241, 0.640412, 0.465652, 0.580236, \ 377 0.933036], [0.515264, 0.770184, 0.0536107, 0.776898, 0.642594, \ 378 0.195816, 0.671027, 0.43862, 0.446784, 0.306716, 0.915457, 0.149282, \ 379 0.668602, 0.42236, 0.470068, 0.170464, 0.637024, 0.917844, 0.567187, \ 380 0.0532555, 0.770735, 0.190391, 0.205231, 0.031518, 0.642223, \ 381 0.016357, 0.692619, 0.0832153, 0.0436543, 0.0906243, 0.661425, \ 382 0.0891193], [0.466054, 0.900667, 0.744557, 0.328932, 0.60276, 0.7779, \ 383 0.786752, 0.436824, 0.842516, 0.611117, 0.480837, 0.1921, 0.0116031, \ 384 0.890494, 0.061645, 0.386379, 0.469331, 0.0273887, 0.732736, \ 385 0.485862, 0.374499, 0.533253, 0.283584, 0.759343, 0.126319, 0.993569, \ 386 0.103128, 0.33436, 0.0411333, 0.395071, 0.225115, 0.969658], \ 387 [0.468083, 0.289069, 0.637141, 0.310331, 0.677455, 0.0455287, \ 388 0.260893, 0.32699, 0.0778317, 0.0824527, 0.903272, 0.487342, \ 389 0.706676, 0.362973, 0.0680058, 0.828021, 0.239359, 0.636767, \ 390 0.913178, 0.282053, 0.258906, 0.0337252, 0.605338, 0.95831, 0.845272, \ 391 0.0103118, 0.247598, 0.886535, 0.10445, 0.536929, 0.98549, 0.183116], \ 392 [0.545992, 0.652514, 0.753503, 0.842167, 0.0110663, 0.713291, \ 393 0.375889, 0.803058, 0.535099, 0.810246, 0.544022, 0.281562, 0.134866, \ 394 0.967045, 0.332599, 0.936183, 0.0973818, 0.838902, 0.0228137, \ 395 0.49566, 0.670023, 0.0553362, 0.0187522, 0.468683, 0.402021, \ 396 0.912399, 0.239761, 0.56295, 0.647782, 0.77263, 0.381246, 0.6888], \ 397 [0.640077, 0.07539, 0.16995, 0.290403, 0.496647, 0.3411, 0.719986, \ 398 0.112845, 0.478323, 0.0522038, 0.792506, 0.623008, 0.837196, \ 399 0.269674, 0.308898, 0.518689, 0.16468, 0.28711, 0.408763, 0.0674661, \ 400 0.506758, 0.0807132, 0.382719, 0.192486, 0.868124, 0.68044, 0.947733, \ 401 0.721963, 0.964378, 0.709648, 0.802888, 0.314101], [0.383112, \ 402 0.591224, 0.593851, 0.242117, 0.682389, 0.485626, 0.567901, 0.345966, \ 403 0.941318, 0.233239, 0.646387, 0.736894, 0.52425, 0.850128, 0.224221, \ 404 0.22348, 0.758234, 0.178456, 0.121915, 0.688154, 0.892199, 0.363851, \ 405 0.215289, 0.178046, 0.291059, 0.757939, 0.579081, 0.441422, 0.784167, \ 406 0.00238388, 0.529623, 0.559091], [0.118876, 0.406047, 0.611397, \ 407 0.569115, 0.019261, 0.418224, 0.778077, 0.885718, 0.857737, 0.391441, \ 408 0.069531, 0.971273, 0.558379, 0.353897, 0.454349, 0.85623, 0.798987, \ 409 0.327323, 0.413279, 0.882087, 0.977398, 0.944955, 0.269674, \ 410 0.00938203, 0.765171, 0.813286, 0.47253, 0.135663, 0.758958, \ 411 0.144282, 0.776811, 0.0878017], [0.729824, 0.107338, 0.379056, \ 412 0.251152, 0.552293, 0.223821, 0.286129, 0.846771, 0.0799255, \ 413 0.334347, 0.32592, 0.69965, 0.133489, 0.531975, 0.719641, 0.184999, \ 414 0.164666, 0.773531, 0.365731, 0.243699, 0.752994, 0.78749, 0.241201, \ 415 0.241564, 0.806296, 0.109006, 0.13062, 0.205934, 0.816858, 0.0382181, \ 416 0.889981, 0.519696], [0.378298, 0.0332494, 0.107644, 0.822036, \ 417 0.976829, 0.865426, 0.340094, 0.963092, 0.192734, 0.26829, 0.726501, \ 418 0.348085, 0.144679, 0.406277, 0.26813, 0.285053, 0.64562, 0.811063, \ 419 0.803126, 0.5953, 0.825069, 0.636111, 0.708634, 0.19095, 0.255352, \ 420 0.356187, 0.42446, 0.4196, 0.874136, 0.711788, 0.27029, 0.318715], \ 421 [0.789545, 0.121632, 0.490996, 0.623702, 0.0566727, 0.558638, \ 422 0.207153, 0.959089, 0.917647, 0.210203, 0.336343, 0.282568, 0.839655, \ 423 0.749362, 0.4425, 0.968553, 0.887713, 0.792622, 0.625122, 0.864763, \ 424 0.0329625, 0.52034, 0.329579, 0.00394267, 0.0298472, 0.678188, \ 425 0.576767, 0.51385, 0.798511, 0.637733, 0.260121, 0.912177], \ 426 [0.736239, 0.209724, 0.924144, 0.0489936, 0.325291, 0.657606, \ 427 0.190817, 0.932395, 0.360709, 0.168952, 0.214184, 0.849683, 0.259534, \ 428 0.207044, 0.216733, 0.484543, 0.405837, 0.427172, 0.123429, 0.875985, \ 429 0.933807, 0.326904, 0.408833, 0.231656, 0.814313, 0.820576, 0.501717, \ 430 0.0878438, 0.498665, 0.105059, 0.0962973, 0.364031], [0.0235064, \ 431 0.00758757, 0.538598, 0.98839, 0.324052, 0.316089, 0.176858, \ 432 0.173556, 0.800775, 0.87829, 0.392057, 0.941723, 0.57049, 0.991474, \ 433 0.334767, 0.950152, 0.283758, 0.00659644, 0.37855, 0.38408, 0.803609, \ 434 0.662623, 0.739661, 0.318444, 0.544472, 0.482995, 0.80555, 0.0455931, \ 435 0.0423814, 0.173049, 0.150615, 0.98448], [0.0947985, 0.809412, \ 436 0.865235, 0.100868, 0.650863, 0.4445, 0.580767, 0.83095, 0.597687, \ 437 0.218641, 0.677191, 0.669111, 0.625174, 0.822944, 0.538428, 0.347098, \ 438 0.212809, 0.524027, 0.752455, 0.416554, 0.699941, 0.860133, 0.564371, \ 439 0.655896, 0.897347, 0.0766369, 0.746071, 0.477173, 0.668873, \ 440 0.996869, 0.443135, 0.041959], [0.375554, 0.440842, 0.460433, \ 441 0.786897, 0.0264724, 0.0250899, 0.815844, 0.0471153, 0.263669, \ 442 0.0169742, 0.497879, 0.217152, 0.19403, 0.0779415, 0.0675226, \ 443 0.344732, 0.249825, 0.569485, 0.123544, 0.140785, 0.257697, 0.992708, \ 444 0.964825, 0.684051, 0.349104, 0.302872, 0.6903, 0.52081, 0.153346, \ 445 0.751101, 0.4333, 0.692784], [0.413996, 0.668545, 0.80703, 0.182556, \ 446 0.0134766, 0.111083, 0.0541739, 0.905122, 0.768152, 0.216453, \ 447 0.433161, 0.98665, 0.84733, 0.777085, 0.452531, 0.37719, 0.976604, \ 448 0.750674, 0.997839, 0.458785, 0.411489, 0.251714, 0.799549, 0.454091, \ 449 0.32992, 0.143513, 0.167756, 0.0225491, 0.756232, 0.257239, \ 450 0.0451669, 0.340243], [0.974505, 0.798027, 0.973791, 0.537498, \ 451 0.300131, 0.83449, 0.140613, 0.909839, 0.172297, 0.0527656, 0.764177, \ 452 0.348042, 0.285017, 0.713485, 0.149116, 0.000701093, 0.454292, \ 453 0.313439, 0.354333, 0.0799855, 0.447158, 0.44342, 0.243024, 0.105926, \ 454 0.142257, 0.349596, 0.636754, 0.571759, 0.50944, 0.486054, 0.770275, \ 455 0.173402], [0.821058, 0.587962, 0.300433, 0.710537, 0.500014, \ 456 0.12987, 0.523508, 0.441253, 0.567836, 0.677178, 0.913873, 0.483632, \ 457 0.670528, 0.771258, 0.297251, 0.734813, 0.697905, 0.875179, 0.664255, \ 458 0.548498, 0.266549, 0.621289, 0.862001, 0.981694, 0.530604, 0.402943, \ 459 0.039312, 0.0585467, 0.232252, 0.427328, 0.306247, 0.0586208], \ 460 [0.747795, 0.690828, 0.00217213, 0.321873, 0.806692, 0.405953, \ 461 0.592753, 0.145827, 0.435068, 0.74242, 0.905952, 0.893161, 0.112491, \ 462 0.821869, 0.556659, 0.479933, 0.474456, 0.779092, 0.470226, 0.570959, \ 463 0.488268, 0.937245, 0.96444, 0.000240915, 0.727272, 0.944077, \ 464 0.902209, 0.47192, 0.576518, 0.294185, 0.45726, 0.998216], [0.565336, \ 465 0.904815, 0.0974912, 0.318141, 0.14708, 0.510372, 0.241564, 0.325932, \ 466 0.748063, 0.820055, 0.742096, 0.875849, 0.84732, 0.903475, 0.459597, \ 467 0.369881, 0.997251, 0.574695, 0.327148, 0.963399, 0.222865, 0.015163, \ 468 0.988431, 0.252985, 0.660087, 0.824832, 0.558565, 0.0432452, \ 469 0.212922, 0.112049, 0.15882, 0.876257], [0.915658, 0.7995, 0.887197, \ 470 0.547283, 0.68251, 0.0875499, 0.842114, 0.834181, 0.569782, \ 471 0.0906641, 0.722069, 0.462267, 0.529126, 0.470145, 0.49426, 0.122644, \ 472 0.115869, 0.27918, 0.71576, 0.677887, 0.946562, 0.458445, 0.239908, \ 473 0.420514, 0.483277, 0.710438, 0.182457, 0.095803, 0.502548, \ 474 0.0847858, 0.27578, 0.688578], [0.764824, 0.656358, 0.475478, \ 475 0.053971, 0.393609, 0.555448, 0.807086, 0.0845441, 0.111597, \ 476 0.386532, 0.625653, 0.375229, 0.504558, 0.403603, 0.51777, 0.465392, \ 477 0.46007, 0.969979, 0.256666, 0.0914928, 0.495148, 0.496291, 0.955921, \ 478 0.784861, 0.353375, 0.476911, 0.435112, 0.180558, 0.121669, 0.404513, \ 479 0.655334, 0.154492], [0.109089, 0.98058, 0.0043154, 0.430207, \ 480 0.53258, 0.638813, 0.129111, 0.707437, 0.107928, 0.562803, 0.446195, \ 481 0.546008, 0.363152, 0.195992, 0.251653, 0.215657, 0.962838, 0.890721, \ 482 0.394591, 0.435407, 0.502739, 0.47562, 0.143479, 0.343967, 0.223496, \ 483 0.813379, 0.441616, 0.895008, 0.835599, 0.78915, 0.916829, 0.197724], \ 484 [0.364765, 0.260923, 0.907561, 0.219673, 0.465021, 0.212777, \ 485 0.161095, 0.118085, 0.371207, 0.915132, 0.798451, 0.197264, 0.216205, \ 486 0.834418, 0.480233, 0.0619294, 0.216872, 0.423901, 0.73477, 0.557181, \ 487 0.874451, 0.682996, 0.447527, 0.249879, 0.516152, 0.219925, 0.734962, \ 488 0.311518, 0.713282, 0.189919, 0.953687, 0.878328], [0.608323, \ 489 0.286353, 0.292643, 0.586521, 0.652889, 0.522976, 0.606721, 0.549773, \ 490 0.721642, 0.117941, 0.69444, 0.115633, 0.135029, 0.311762, 0.36826, \ 491 0.183629, 0.685729, 0.808256, 0.804516, 0.367428, 0.248443, 0.950368, \ 492 0.592981, 0.464375, 0.0405165, 0.439708, 0.425667, 0.12509, 0.191941, \ 493 0.585167, 0.501442, 0.758111], [0.51859, 0.318801, 0.0511754, \ 494 0.528103, 0.696379, 0.163925, 0.923365, 0.889314, 0.803733, 0.657009, \ 495 0.162188, 0.572416, 0.414081, 0.67728, 0.842954, 0.519273, 0.169699, \ 496 0.408016, 0.86035, 0.233082, 0.0787194, 0.842804, 0.98437, 0.784041, \ 497 0.413102, 0.891386, 0.322925, 0.545048, 0.392852, 0.226103, 0.969887, \ 498 0.548364]] 499 if d == 33: 500 m = [[0.180472, 0.342639, 0.325276, 0.545704, 0.451983, 0.373818, \ 501 0.78615, 0.255714, 0.838041, 0.097278, 0.622356, 0.89102, 0.5914, \ 502 0.889809, 0.310819, 0.474241, 0.630476, 0.338754, 0.39599, 0.557622, \ 503 0.0223869, 0.508037, 0.90211, 0.391692, 0.340507, 0.421016, 0.598469, \ 504 0.264287, 0.797811, 0.955201, 0.977077, 0.296768, 0.00568295], \ 505 [0.0402768, 0.733473, 0.147792, 0.62644, 0.673563, 0.3327, 0.208436, \ 506 0.50946, 0.123825, 0.971975, 0.243086, 0.855794, 0.202858, 0.404454, \ 507 0.833336, 0.638796, 0.961742, 0.391732, 0.409352, 0.459476, 0.763147, \ 508 0.952704, 0.870003, 0.324707, 0.0190341, 0.976663, 0.933853, \ 509 0.797752, 0.947691, 0.173108, 0.679321, 0.0148456, 0.797354], \ 510 [0.40818, 0.819997, 0.158828, 0.507639, 0.822462, 0.263336, 0.678454, \ 511 0.145643, 0.0160026, 0.418995, 0.342777, 0.848048, 0.0583393, \ 512 0.809739, 0.432244, 0.578278, 0.771404, 0.105054, 0.344225, 0.199467, \ 513 0.818476, 0.102374, 0.589968, 0.511945, 0.494632, 0.0415236, \ 514 0.521946, 0.478924, 0.845236, 0.796915, 0.0514031, 0.550806, \ 515 0.0886831], [0.0739224, 0.590408, 0.642615, 0.185089, 0.033212, \ 516 0.0184966, 0.361786, 0.403862, 0.0620605, 0.546202, 0.428819, \ 517 0.55923, 0.578064, 0.208484, 0.523704, 0.188812, 0.970661, 0.269089, \ 518 0.704783, 0.288323, 0.853953, 0.579124, 0.369026, 0.636393, 0.267555, \ 519 0.406682, 0.208, 0.0433634, 0.793517, 0.92274, 0.289819, 0.398678, \ 520 0.625487], [0.569808, 0.411696, 0.367159, 0.796069, 0.242911, \ 521 0.52369, 0.0414615, 0.375769, 0.0349582, 0.0468055, 0.523025, \ 522 0.44659, 0.692033, 0.757768, 0.164422, 0.981635, 0.182349, 0.190806, \ 523 0.625824, 0.843379, 0.875716, 0.36376, 0.793023, 0.454705, 0.689926, \ 524 0.262633, 0.387627, 0.217524, 0.0113575, 0.265817, 0.427361, \ 525 0.549389, 0.316787], [0.459613, 0.638459, 0.0575594, 0.520666, \ 526 0.853265, 0.0741818, 0.644304, 0.241368, 0.00389035, 0.126602, \ 527 0.608203, 0.750404, 0.136667, 0.489259, 0.645017, 0.931951, 0.597064, \ 528 0.502011, 0.679183, 0.745949, 0.75322, 0.0052193, 0.871952, 0.402392, \ 529 0.724891, 0.344997, 0.596444, 0.756673, 0.0998223, 0.968595, \ 530 0.605174, 0.532889, 0.653592], [0.11938, 0.283165, 0.254346, \ 531 0.781306, 0.148391, 0.924732, 0.64329, 0.48335, 0.444858, 0.508379, \ 532 0.380283, 0.793816, 0.342015, 0.445115, 0.508993, 0.041112, \ 533 0.0718632, 0.412107, 0.263165, 0.670939, 0.737432, 0.777792, 0.53989, \ 534 0.336085, 0.962137, 0.322577, 0.326377, 0.571092, 0.686163, \ 535 0.000445441, 0.575301, 0.574112, 0.0713595], [0.182552, 0.951371, \ 536 0.083816, 0.502208, 0.178327, 0.836613, 0.597658, 0.697877, 0.432917, \ 537 0.923784, 0.127485, 0.880965, 0.971141, 0.139048, 0.204491, 0.517381, \ 538 0.558202, 0.470632, 0.994191, 0.884601, 0.494413, 0.606673, \ 539 0.0941226, 0.856249, 0.745468, 0.661075, 0.186202, 0.800699, \ 540 0.545882, 0.78278, 0.164325, 0.56654, 0.234361], [0.452066, 0.556187, \ 541 0.404928, 0.81359, 0.604885, 0.812544, 0.105253, 0.49513, 0.623892, \ 542 0.406024, 0.563282, 0.423169, 0.917038, 0.629291, 0.354677, 0.637767, \ 543 0.0126974, 0.403746, 0.271005, 0.0239397, 0.741324, 0.000759967, \ 544 0.0278572, 0.850122, 0.622846, 0.306142, 0.308556, 0.247874, \ 545 0.773088, 0.164618, 0.793543, 0.553657, 0.737617], [0.191243, \ 546 0.888204, 0.0649631, 0.0835789, 0.319853, 0.0282413, 0.82888, \ 547 0.623575, 0.350648, 0.329508, 0.750929, 0.981378, 0.744727, 0.161868, \ 548 0.0144347, 0.559983, 0.269144, 0.668579, 0.288788, 0.753556, \ 549 0.844752, 0.773795, 0.269356, 0.0521382, 0.594657, 0.586715, \ 550 0.412627, 0.735924, 0.994949, 0.597759, 0.780839, 0.981428, \ 551 0.886983], [0.500082, 0.633381, 0.840406, 0.797838, 0.400964, \ 552 0.527165, 0.126518, 0.851037, 0.0464741, 0.193829, 0.706508, 0.19069, \ 553 0.525847, 0.720792, 0.511571, 0.970815, 0.411656, 0.345454, 0.914402, \ 554 0.985735, 0.0882571, 0.472655, 0.288508, 0.648997, 0.960146, \ 555 0.345016, 0.234769, 0.681618, 0.122471, 0.587405, 0.149163, 0.766955, \ 556 0.205045], [0.499167, 0.71925, 0.521849, 0.830513, 0.199306, \ 557 0.843249, 0.676695, 0.970858, 0.63353, 0.574783, 0.779931, 0.598516, \ 558 0.82729, 0.295628, 0.62557, 0.0100106, 0.00171756, 0.294511, \ 559 0.474362, 0.729168, 0.433305, 0.175542, 0.750116, 0.283787, 0.441664, \ 560 0.546287, 0.48493, 0.324103, 0.686833, 0.146713, 0.630067, 0.188277, \ 561 0.181819], [0.478044, 0.0244674, 0.400708, 0.417688, 0.682018, \ 562 0.160381, 0.963503, 0.988708, 0.867003, 0.654303, 0.432825, 0.739039, \ 563 0.461256, 0.560147, 0.764569, 0.422231, 0.682743, 0.54797, 0.632032, \ 564 0.790543, 0.54767, 0.784373, 0.333022, 0.581093, 0.755827, 0.699565, \ 565 0.578381, 0.836268, 0.708734, 0.920027, 0.596686, 0.330069, 0.74928], \ 566 [0.526921, 0.642604, 0.172258, 0.505533, 0.234636, 0.517936, \ 567 0.915639, 0.12547, 0.481349, 0.217246, 0.903549, 0.277123, 0.617767, \ 568 0.999133, 0.736606, 0.653349, 0.135948, 0.046346, 0.647411, 0.889216, \ 569 0.0830548, 0.140618, 0.0429108, 0.0574949, 0.530104, 0.44246, \ 570 0.0710688, 0.365357, 0.323366, 0.299136, 0.301513, 0.521108, \ 571 0.396917], [0.538949, 0.0597017, 0.0426872, 0.77976, 0.638647, \ 572 0.834551, 0.297674, 0.453674, 0.134076, 0.891232, 0.494914, 0.657503, \ 573 0.20045, 0.417682, 0.699186, 0.723612, 0.716046, 0.908808, 0.325256, \ 574 0.267951, 0.877024, 0.547235, 0.734905, 0.707428, 0.22615, 0.170641, \ 575 0.251801, 0.372346, 0.45977, 0.99796, 0.611535, 0.532378, 0.506652], \ 576 [0.855429, 0.224705, 0.406208, 0.304333, 0.66549, 0.271182, 0.294317, \ 577 0.695005, 0.42295, 0.350388, 0.909051, 0.337894, 0.115478, 0.573011, \ 578 0.00885253, 0.511718, 0.408663, 0.45689, 0.932546, 0.392435, \ 579 0.557556, 0.21016, 0.332412, 0.981314, 0.0808182, 0.766876, 0.943551, \ 580 0.199142, 0.944077, 0.6711, 0.44381, 0.671061, 0.962204], [0.0849663, \ 581 0.396795, 0.693205, 0.232572, 0.891823, 0.390317, 0.0506422, \ 582 0.743269, 0.902357, 0.64524, 0.232391, 0.538827, 0.33895, 0.298695, \ 583 0.14703, 0.0636232, 0.735462, 0.026976, 0.533921, 0.50922, 0.088565, \ 584 0.112848, 0.171562, 0.956842, 0.798053, 0.481693, 0.537116, \ 585 0.00319687, 0.784561, 0.150593, 0.866739, 0.748044, 0.339033], \ 586 [0.811655, 0.228755, 0.143346, 0.863177, 0.677884, 0.0130702, \ 587 0.417937, 0.829027, 0.396751, 0.968414, 0.094855, 0.382097, 0.53666, \ 588 0.194071, 0.878117, 0.321591, 0.677877, 0.350024, 0.0109106, \ 589 0.0429985, 0.482836, 0.972063, 0.378966, 0.575559, 0.859691, \ 590 0.351807, 0.0302582, 0.922712, 0.502291, 0.362365, 0.193774, \ 591 0.638772, 0.00484069], [0.0419704, 0.948873, 0.00938601, 0.0589582, \ 592 0.222804, 0.225482, 0.839349, 0.842982, 0.606636, 0.886988, 0.460524, \ 593 0.55637, 0.833036, 0.896245, 0.128409, 0.69833, 0.200041, 0.812714, \ 594 0.338841, 0.0418833, 0.332366, 0.552208, 0.872062, 0.77003, 0.460792, \ 595 0.487551, 0.590676, 0.715252, 0.159437, 0.245553, 0.44435, 0.304755, \ 596 0.332684], [0.28418, 0.20182, 0.102562, 0.575487, 0.725905, 0.734821, \ 597 0.145425, 0.20771, 0.247928, 0.455078, 0.151963, 0.863549, 0.391113, \ 598 0.107591, 0.397905, 0.203068, 0.982776, 0.0648292, 0.286489, 0.24354, \ 599 0.774618, 0.553899, 0.398329, 0.706091, 0.78104, 0.617354, 0.306895, \ 600 0.880162, 0.891409, 0.686051, 0.992439, 0.678662, 0.715439], \ 601 [0.580313, 0.557155, 0.0863804, 0.87926, 0.916673, 0.320722, \ 602 0.435677, 0.919475, 0.125682, 0.0551085, 0.508548, 0.23035, 0.181977, \ 603 0.541161, 0.074376, 0.114519, 0.307677, 0.482986, 0.796034, 0.367716, \ 604 0.685904, 0.852248, 0.291913, 0.00395931, 0.980518, 0.673355, \ 605 0.828038, 0.18139, 0.658491, 0.335332, 0.347627, 0.30871, 0.505173], \ 606 [0.0823304, 0.689252, 0.733335, 0.384638, 0.872219, 0.751718, \ 607 0.14283, 0.964649, 0.685294, 0.81242, 0.379802, 0.637524, 0.108016, \ 608 0.204059, 0.986508, 0.644499, 0.270986, 0.327306, 0.46137, 0.368802, \ 609 0.265613, 0.253858, 0.0469391, 0.489631, 0.00621, 0.432485, 0.352592, \ 610 0.620197, 0.0221417, 0.0961601, 0.0174084, 0.542534, 0.785859], \ 611 [0.834294, 0.311568, 0.0635048, 0.698034, 0.424823, 0.699808, \ 612 0.100361, 0.711107, 0.372018, 0.47525, 0.0516863, 0.345562, 0.367445, \ 613 0.39923, 0.352465, 0.925622, 0.0800203, 0.621117, 0.213941, 0.796669, \ 614 0.242094, 0.0775034, 0.180726, 0.792237, 0.499691, 0.539115, \ 615 0.606528, 0.2737, 0.191404, 0.204545, 0.662633, 0.958458, 0.870762], \ 616 [0.0346136, 0.108385, 0.804346, 0.0611441, 0.926934, 0.399432, \ 617 0.180015, 0.584645, 0.884758, 0.846218, 0.255149, 0.717863, 0.70456, \ 618 0.354724, 0.454721, 0.69625, 0.55816, 0.556823, 0.453642, 0.8659, \ 619 0.183238, 0.117989, 0.0827856, 0.584917, 0.389932, 0.501786, 0.69244, \ 620 0.455006, 0.839933, 0.483699, 0.965653, 0.690272, 0.378605], \ 621 [0.649339, 0.459381, 0.707958, 0.347764, 0.234653, 0.355172, 0.92703, \ 622 0.0272606, 0.835834, 0.626404, 0.852447, 0.84299, 0.613014, 0.374245, \ 623 0.410823, 0.821113, 0.544167, 0.19295, 0.222633, 0.646794, 0.880685, \ 624 0.326803, 0.111279, 0.922648, 0.230494, 0.575541, 0.91982, 0.014955, \ 625 0.782726, 0.187276, 0.593701, 0.976028, 0.694473], [0.66811, \ 626 0.689909, 0.299129, 0.348343, 0.34427, 0.0159964, 0.532865, 0.307591, \ 627 0.149309, 0.14992, 0.710193, 0.72558, 0.359774, 0.494283, 0.890411, \ 628 0.870821, 0.665459, 0.709639, 0.530634, 0.679075, 0.636084, 0.977629, \ 629 0.743466, 0.518235, 0.75635, 0.469916, 0.702219, 0.487181, 0.232738, \ 630 0.0337613, 0.126202, 0.741976, 0.556195], [0.0391251, 0.898173, \ 631 0.851775, 0.85659, 0.647724, 0.0637494, 0.143015, 0.209207, 0.624062, \ 632 0.463522, 0.609943, 0.998072, 0.827428, 0.0478492, 0.133529, \ 633 0.762658, 0.0776384, 0.14129, 0.886664, 0.347654, 0.00843196, \ 634 0.976925, 0.796339, 0.342714, 0.169307, 0.00014281, 0.900409, \ 635 0.846251, 0.773448, 0.214647, 0.951153, 0.676512, 0.15983], \ 636 [0.541131, 0.848564, 0.0246193, 0.910436, 0.645267, 0.943575, \ 637 0.98105, 0.500393, 0.166299, 0.723584, 0.190244, 0.285815, 0.892464, \ 638 0.951179, 0.691487, 0.308201, 0.104652, 0.266595, 0.904441, \ 639 0.0543669, 0.938301, 0.996299, 0.160286, 0.709642, 0.74511, 0.726303, \ 640 0.992327, 0.325052, 0.638849, 0.853715, 0.185038, 0.59402, 0.83834], \ 641 [0.828881, 0.515172, 0.189334, 0.36837, 0.318165, 0.0394882, \ 642 0.160242, 0.738831, 0.459337, 0.618784, 0.0900528, 0.176485, \ 643 0.195266, 0.0603371, 0.62561, 0.789911, 0.477578, 0.536344, 0.647711, \ 644 0.852552, 0.850087, 0.558568, 0.891803, 0.197272, 0.192976, 0.164475, \ 645 0.319596, 0.65066, 0.100558, 0.908424, 0.303019, 0.300355, 0.180213], \ 646 [0.451996, 0.865975, 0.633373, 0.783782, 0.267788, 0.622571, \ 647 0.507511, 0.912514, 0.731618, 0.855629, 0.847638, 0.599914, \ 648 0.0305685, 0.577372, 0.779523, 0.512601, 0.362865, 0.547878, \ 649 0.603194, 0.444419, 0.626591, 0.840922, 0.38914, 0.353191, 0.0650096, \ 650 0.173542, 0.615509, 0.920381, 0.29204, 0.387202, 0.195245, 0.802745, \ 651 0.306493], [0.473989, 0.387328, 0.112169, 0.473414, 0.110307, \ 652 0.444611, 0.598916, 0.619197, 0.896273, 0.769338, 0.013492, 0.742983, \ 653 0.783966, 0.74329, 0.566827, 0.780564, 0.675125, 0.299919, 0.900265, \ 654 0.991216, 0.0544971, 0.538257, 0.719562, 0.536944, 0.668761, \ 655 0.279333, 0.322903, 0.333724, 0.587359, 0.961897, 0.0342651, 0.16843, \ 656 0.627418], [0.243316, 0.199035, 0.475978, 0.0644149, 0.553477, \ 657 0.786537, 0.234219, 0.778276, 0.37508, 0.257621, 0.700972, 0.699155, \ 658 0.274507, 0.765203, 0.435808, 0.916153, 0.532233, 0.0381237, \ 659 0.900033, 0.176873, 0.0741992, 0.532318, 0.43112, 0.208764, 0.555612, \ 660 0.530045, 0.015728, 0.235306, 0.145328, 0.585243, 0.992986, 0.722389, \ 661 0.730683], [0.423743, 0.848841, 0.836249, 0.639022, 0.354534, \ 662 0.92115, 0.0732236, 0.381685, 0.586385, 0.00352369, 0.429172, \ 663 0.131378, 0.360736, 0.308957, 0.887067, 0.246423, 0.866243, 0.67876, \ 664 0.850741, 0.267307, 0.16562, 0.169409, 0.807195, 0.90028, 0.114799, \ 665 0.143976, 0.0529281, 0.613068, 0.564039, 0.723069, 0.312112, \ 666 0.881759, 0.391551]] 667 return(np.array(m)) 668 669def getDefinitePositiveMatrix(d): 670 a = 1.0 * np.diag(np.array(range(1,d+1)))/d 671 p = getInvertibleMatrix(d) 672 return(np.matmul(p,np.matmul(a,np.transpose(p)))) 673 674def getSemidefinitePositiveMatrix(d,k=3): 675 if d >= k + 1 : 676 a = np.diag(np.hstack([np.array(range(1,d+1-k)),np.zeros(k)])) / d 677 else: 678 a = 1.0 * np.diag(np.array(range(1,d+1)))/d 679 p = getInvertibleMatrix(d) 680 return(np.matmul(p,np.matmul(a,np.transpose(p)))) 681 682def notnull(x): 683 if x == 0: 684 return(0.2) 685 else: 686 return(x) 687 688def writeUnaryTests(config,format): 689 # For benchmarks 690 NBSAMPLES=NBA*NBB 691 NBVECSAMPLES = NBB 692 # 693 data1=np.random.randn(NBSAMPLES) 694 data1 = Tools.normalize(data1) 695 if format == Tools.Q7: 696 data1 = data1 / 4.0 697 # 698 data1C=randComplex(NBSAMPLES) 699 # 700 if format == Tools.Q7: 701 data1C = data1C / 4.0 702 # 703 data2=np.random.randn(NBSAMPLES) 704 data2 = Tools.normalize(data2) 705 # 706 vecdata=np.random.randn(NBVECSAMPLES) 707 vecdata = Tools.normalize(vecdata) 708 if format == Tools.Q7: 709 vecdata = vecdata / 4.0 710 # 711 # 712 config.writeInput(1, data1,"InputA") 713 config.writeInput(1, asReal(data1C),"InputAC") 714 # 715 config.writeInput(1, data2,"InputB") 716 config.writeInput(1, vecdata,"InputVec") 717 # 718 # For tests 719 NA=[1,2,3,4,Tools.loopnb(format,Tools.TAILONLY), 720 Tools.loopnb(format,Tools.BODYONLY), 721 Tools.loopnb(format,Tools.BODYANDTAIL) 722 ] 723 unarySizes = cartesian(NA,NA) 724 # 725 dims=[] 726 for (a,b) in unarySizes: 727 dims.append(a) 728 dims.append(b) 729 # One kind of matrix shape 730 config.writeInputS16(1, dims,"DimsUnary") 731 # 732 vals = [] 733 for (a,b) in unarySizes: 734 ma = np.copy(data1[0:a*b]).reshape(a,b) 735 mb = np.copy(data2[0:a*b]).reshape(a,b) 736 r = ma + mb 737 r = list(r.reshape(a*b)) 738 vals = vals + r 739 config.writeReference(1, vals,"RefAdd") 740 # 741 vals=[] 742 for (a,b) in unarySizes: 743 ma = np.copy(data1[0:a*b]).reshape(a,b) 744 v = np.copy(vecdata[0:b]) 745 r = ma.dot(v) 746 r = list(r.reshape(a)) 747 vals = vals + r 748 config.writeReference(1, vals,"RefVecMul") 749 # 750 vals = [] 751 for (a,b) in unarySizes: 752 ma = np.copy(data1[0:a*b]).reshape(a,b) 753 mb = np.copy(data2[0:a*b]).reshape(a,b) 754 r = ma - mb 755 r = list(r.reshape(a*b)) 756 vals = vals + r 757 config.writeReference(1, vals,"RefSub") 758 # 759 vals = [] 760 for (a,b) in unarySizes: 761 ma = np.copy(data1[0:a*b]).reshape(a,b) 762 r = np.transpose(ma) 763 r = list(r.reshape(a*b)) 764 vals = vals + r 765 config.writeReference(1, vals,"RefTranspose") 766 # 767 vals = [] 768 for (a,b) in unarySizes: 769 ma = np.copy(data1C[0:a*b]).reshape(a,b) 770 r = np.transpose(ma) 771 r = list(asReal(r.reshape(a*b))) 772 vals = vals + r 773 config.writeReference(1, vals,"RefTransposeC") 774 # 775 vals = [] 776 for (a,b) in unarySizes: 777 ma = np.copy(data1[0:a*b]).reshape(a,b) 778 r = ma * 0.5 779 r = list(r.reshape(a*b)) 780 vals = vals + r 781 config.writeReference(1, vals,"RefScale") 782 # 783 # Current algo is not very accurate for big matrix. 784 # But big matrix required to check the vectorized code. 785 if format==Tools.F16: 786 # Size limited for f16 because accuracy is 787 # not good at all for bigger matrices 788 dims=[1,2,3,4,7,8,9,15,16] 789 else: 790 dims=[1,2,3,4,7,8,9,15,16,17,32,33] 791 # 792 793 794 vals = [] 795 inp=[] 796 797 for d in dims: 798 ma = getInvertibleMatrix(d) 799 inp = inp + list(ma.reshape(d*d)) 800 r = numpy.linalg.inv(ma) 801 vals = vals + list(r.reshape(d*d)) 802 # 803 # Add matrix for testing null pivot condition 804 ma = np.array([[0., 3.], [4., 5.]]) 805 inp = inp + list(ma.reshape(4)) 806 r = np.linalg.inv(ma) 807 vals = vals + list(r.reshape(4)) 808 dims.append(2) 809 810 # Add matrix for testing singular matrix 811 812 ma = np.array([[1., 2.], [2., 4.]]) 813 inp = inp + list(ma.reshape(4)) 814 815 r = np.array([0.,0.5,1.0,-0.5]) 816 vals = vals + list(r) 817 dims.append(2) 818 # 819 config.writeInputS16(1, dims,"DimsInvert") 820 config.writeInput(1, inp,"InputInvert") 821 config.writeReference(1, vals,"RefInvert") 822 823 # One kind of matrix shape 824 825 # Cholesky and LDLT definite positive (DPO) 826 inp=[] 827 vals = [] 828 dvals=[] 829 llvals=[] 830 permvals=[] 831 uts=[] # U 832 lts=[] # L 833 rndas=[] # A 834 utinvs=[] # X such that UX=A 835 ltinvs=[] # X such that LX=A 836 cholinvs=[] # X such that MA X = A where A positive definite 837 for d in dims: 838 ma = getDefinitePositiveMatrix(d) 839 inp = inp + list(ma.reshape(d*d)) 840 # Lower triangular 841 l = scipy.linalg.cholesky(ma,lower=True) 842 843 vals = vals + list(l.reshape(d*d)) 844 845 ll, di, perm = ldlt(ma) 846 847 if not valid(ma,ll,di,perm): 848 print("Error LDLT with positive definite !") 849 sys.exit(1) 850 851 llvals = llvals + list(ll.reshape(d*d)) 852 dvals = dvals + list(di.reshape(d*d)) 853 permvals = permvals + list(perm.reshape(d)) 854 855 a = np.random.randn(d*d) 856 a = Tools.normalize(a) 857 a = a.reshape(d,d) 858 859 lt = l 860 ut = l.transpose() 861 862 utinv = np.linalg.solve(ut,a) 863 ltinv = np.linalg.solve(lt,a) 864 cholinv = np.linalg.solve(ma,a) 865 866 uts += list(ut.reshape(d*d)) 867 lts += list(lt.reshape(d*d)) 868 rndas += list(a.reshape(d*d)) 869 870 utinvs += list(utinv.reshape(d*d)) 871 ltinvs += list(ltinv.reshape(d*d)) 872 cholinvs += list(cholinv.reshape(d*d)) 873 874 875 876 config.writeInputS16(1, dims,"DimsCholeskyDPO") 877 config.writeInput(1, inp,"InputCholeskyDPO") 878 config.writeReference(1, vals,"RefCholeskyDPO") 879 880 config.writeReference(1, llvals,"RefLDLT_LL_DPO") 881 config.writeReference(1, dvals,"RefLDLT_D_DPO") 882 config.writeReferenceS16(1, permvals,"RefLDLT_PERM_DPO") 883 884 config.writeInput(1, uts,"InputUTDPO") 885 config.writeInput(1, lts,"InputLTDPO") 886 config.writeInput(1, rndas,"InputRNDA") 887 888 config.writeReference(1, utinvs,"Ref_UTINV_DPO") 889 config.writeReference(1, ltinvs,"Ref_LTINV_DPO") 890 config.writeReference(1, cholinvs,"Ref_CHOLINV_DPO") 891 892 r=np.array([(4,4),(8,8),(9,9),(15,15),(16,16)]) 893 r=r.reshape(2*5) 894 config.writeParam(1, r,"ParamsCholesky") 895 896 897 # Cholesky and LDLT semi definite positive (SDPO) 898 dims=[1,2,3,4,7] 899 inp=[] 900 vals = [] 901 dvals=[] 902 llvals=[] 903 permvals=[] 904 for d in dims: 905 ma = getSemidefinitePositiveMatrix(d) 906 inp = inp + list(ma.reshape(d*d)) 907 908 ll, di, perm = ldlt(ma) 909 if not valid(ma,ll,di,perm): 910 print("Error LDLT with positive semi definite !") 911 sys.exit(1) 912 913 llvals = llvals + list(ll.reshape(d*d)) 914 dvals = dvals + list(di.reshape(d*d)) 915 permvals = permvals + list(perm.reshape(d)) 916 917 918 config.writeInputS16(1, dims,"DimsCholeskySDPO") 919 config.writeInput(1, inp,"InputCholeskySDPO") 920 921 config.writeReference(1, llvals,"RefLDLT_LL_SDPO") 922 config.writeReference(1, dvals,"RefLDLT_D_SDPO") 923 config.writeReferenceS16(1, permvals,"RefLDLT_PERM_SDPO") 924 925 # Lower and upper triangular 926 thedims=[] 927 theltmatrix=[] 928 theutmatrix=[] 929 thevectors=[] 930 theltinvs=[] 931 theutinvs=[] 932 nb = 0 933 for matrixDim in dims: 934 for cols in range(1,matrixDim): 935 thedims.append((matrixDim,cols)) 936 nb = nb + 1 937 matrix=np.random.randn(matrixDim * matrixDim).reshape(matrixDim,matrixDim) 938 matrix = Tools.normalize(matrix) 939 # LT 940 matrixLT = np.tril(matrix) 941 diagvalues=[notnull(x) for x in np.diagonal(matrixLT)] 942 np.fill_diagonal(matrixLT, diagvalues) 943 #UP 944 matrixUT = np.triu(matrix) 945 diagvalues=[notnull(x) for x in np.diagonal(matrixUT)] 946 np.fill_diagonal(matrixUT, diagvalues) 947 948 949 theltmatrix = theltmatrix + list(matrixLT.reshape(matrixDim*matrixDim)) 950 theutmatrix = theutmatrix + list(matrixUT.reshape(matrixDim*matrixDim)) 951 952 vector=np.random.randn(matrixDim * cols) 953 vector = Tools.normalize(vector) 954 vector = [notnull(x) for x in vector] 955 vector = np.array(vector).reshape(matrixDim,cols) 956 thevectors = thevectors + list(vector.reshape(matrixDim*cols)) 957 958 refLT=np.linalg.solve(matrixLT,vector) 959 theltinvs = theltinvs + list(refLT.reshape(matrixDim*cols)) 960 961 refUT=np.linalg.solve(matrixUT,vector) 962 theutinvs = theutinvs + list(refUT.reshape(matrixDim*cols)) 963 964 thedims=list(np.array(thedims).reshape(2*nb)) 965 config.writeInput(1, theltmatrix,"InputMatrixLTSolve") 966 config.writeInput(1, theutmatrix,"InputMatrixUTSolve") 967 config.writeInput(1, thevectors,"InputVectorLTSolve") 968 config.writeReference(1, theltinvs,"RefLTSolve") 969 config.writeReference(1, theutinvs,"RefUTSolve") 970 config.writeInputS16(1, thedims,"DimsLTSolve") 971 972def okQRConfig(args): 973 rows,cols,rank=args 974 maxDim=max(rows,cols) 975 return((rank<=maxDim) and (rows >= cols)) 976 977 978 979def testHouseholder(config,format): 980 sizes=[Tools.loopnb(format,Tools.TAILONLY), 981 Tools.loopnb(format,Tools.BODYONLY), 982 Tools.loopnb(format,Tools.BODYANDTAIL) 983 ] 984 985 thedims=[] 986 theInput=[] 987 theOutputVector=[] 988 theOutputValue=[] 989 990 for s in sizes: 991 x = np.random.randn(s) 992 x = Tools.normalize(x) 993 994 v,beta=QR.householder(x) 995 996 thedims.append(s) 997 theInput += list(np.array(x).reshape(s)) 998 theOutputVector += list(np.array(v).reshape(s)) 999 theOutputValue.append(beta) 1000 1001 s = 4 1002 x = np.array([1,0,0,0]) 1003 1004 v,beta=QR.householder(x) 1005 1006 thedims.append(s) 1007 theInput += list(np.array(x).reshape(s)) 1008 theOutputVector += list(np.array(v).reshape(s)) 1009 theOutputValue.append(beta) 1010 1011 1012 x = np.array([-1,0,0,0]) 1013 1014 v,beta=QR.householder(x) 1015 1016 thedims.append(s) 1017 theInput += list(np.array(x).reshape(s)) 1018 theOutputVector += list(np.array(v).reshape(s)) 1019 theOutputValue.append(beta) 1020 1021 config.writeInputS16(1, thedims,"DimsHouseholder") 1022 config.writeInput(1, theInput,"InputVectorHouseHolder") 1023 config.writeReference(1, theOutputVector,"RefVectorHouseholder") 1024 config.writeReference(1, theOutputValue,"RefValueHouseholder") 1025 1026 1027# Check that the matrix is an orthogonal one 1028def checkOrtho(A): 1029 product = A.T.dot(A) 1030 #print(A) 1031 np.fill_diagonal(product,0) 1032 #print(product) 1033 return (np.all(np.abs(product)<1e-10)) 1034 1035# Check the result of the QR algorithm implemented 1036# in python. 1037# We must have M = Q R and Q orthogonal 1038# In f16, on some mqtrix the accuracy is 1039# very bad so the test is relaxed a lot 1040def checkMyQR(m,q,r,format): 1041 # Check that M = QR 1042 # Q is Orthogonal 1043 nm = np.dot(q,r) 1044 rtol = 1e-14 1045 atol = 1e-13 1046 if format == Tools.F16: 1047 rtol = 3e-2 1048 atol = 3e-2 1049 if not (np.allclose(nm,m,rtol=rtol,atol=atol)): 1050 print(np.max(np.abs(nm-m))) 1051 print(np.max(atol + rtol * np.abs(m))) 1052 assert (np.allclose(nm,m,rtol=rtol,atol=atol)) 1053 assert (checkOrtho(q)) 1054 1055 1056# Generate patterns for QR decomposition 1057def testQR(config,format): 1058 eps=1e-16 1059 if format==Tools.F32: 1060 eps=1e-12 1061 if format==Tools.F16: 1062 eps=1.0e-3 1063 thedims=[] 1064 theMatrix=[] 1065 theRefR=[] 1066 theRefQ=[] 1067 theRefTau=[] 1068 1069 sizes=[Tools.loopnb(format,Tools.TAILONLY), 1070 Tools.loopnb(format,Tools.BODYONLY), 1071 Tools.loopnb(format,Tools.BODYANDTAIL) 1072 ] 1073 ranks=[1,Tools.loopnb(format,Tools.TAILONLY), 1074 Tools.loopnb(format,Tools.BODYONLY), 1075 Tools.loopnb(format,Tools.BODYANDTAIL)] 1076 1077 allConfigs=cartesian(sizes,sizes,ranks) 1078 allConfigs=list(filter(okQRConfig,allConfigs)) 1079 1080 for c in allConfigs: 1081 rows,cols,rank = c 1082 thedims += [rows,cols,rank] 1083 m = QR.randomIsometry(rows,cols,rank) 1084 theMatrix += list(np.array(m).reshape(rows*cols)) 1085 1086 #q,r = numpy.linalg.qr(m,mode='complete') 1087 #h,tau = numpy.linalg.qr(m,mode='raw') 1088 1089 q,r,tau,h = QR.QR(m,eps=eps) 1090 # Used to check that the reference Python 1091 # implementation for QR is correct: 1092 checkMyQR(m,q,r,format) 1093 1094 #print(r) 1095 for i in range(cols): 1096 try: 1097 r[i+1:,i] = h[i][1:] 1098 except: 1099 print(h) 1100 print(r) 1101 print(i) 1102 print(r[1:,i]) 1103 print(h[i][1:]) 1104 raise 1105 1106 #print(m) 1107 #print(h) 1108 #print("") 1109 #print(r) 1110 #print("--------\n\n") 1111 1112 1113 1114 theRefTau += list(np.array(tau).reshape(cols)) 1115 theRefR += list(np.array(r).reshape(rows*cols)) 1116 theRefQ += list(np.array(q).reshape(rows*rows)) 1117 1118 for d in sizes: 1119 m = QR.kahan_matrix(d) 1120 thedims += [d,d,d] 1121 1122 theMatrix += list(np.array(m).reshape(d*d)) 1123 #q,r = numpy.linalg.qr(m,mode='complete') 1124 #h,tau = numpy.linalg.qr(m,mode='raw') 1125 q,r,tau,h = QR.QR(m,eps=eps) 1126 # Used to check that the reference Python 1127 # implementation for QR is correct: 1128 checkMyQR(m,q,r,format) 1129 1130 for i in range(d): 1131 try: 1132 r[i+1:,i] = h[i][1:] 1133 except: 1134 print(h) 1135 print(r) 1136 print(i) 1137 raise 1138 theRefTau += list(np.array(tau).reshape(d)) 1139 theRefR += list(np.array(r).reshape(d*d)) 1140 theRefQ += list(np.array(q).reshape(d*d)) 1141 1142 config.writeInputS16(1, thedims,"DimsQR") 1143 config.writeInput(1, theMatrix,"InputMatrixQR") 1144 1145 config.writeReference(1, theRefTau,"RefTau") 1146 config.writeReference(1, theRefR,"RefR") 1147 config.writeReference(1, theRefQ,"RefQ") 1148 1149 1150 1151 1152def checkHouseholder(h): 1153 v,beta=h 1154 n = len(v) 1155 #print(v) 1156 #print(beta) 1157 v=v[np.newaxis] 1158 1159 p=np.identity(n)-beta * v.T .dot(v) 1160 #print("P") 1161 #print(p) 1162 print(checkOrtho(p)) 1163 1164 1165def generatePatterns(): 1166 1167 PATTERNBINDIR = os.path.join("Patterns","DSP","Matrix","Binary","Binary") 1168 PARAMBINDIR = os.path.join("Parameters","DSP","Matrix","Binary","Binary") 1169 1170 configBinaryf64=Tools.Config(PATTERNBINDIR,PARAMBINDIR,"f64") 1171 configBinaryf32=Tools.Config(PATTERNBINDIR,PARAMBINDIR,"f32") 1172 configBinaryf16=Tools.Config(PATTERNBINDIR,PARAMBINDIR,"f16") 1173 configBinaryq31=Tools.Config(PATTERNBINDIR,PARAMBINDIR,"q31") 1174 configBinaryq15=Tools.Config(PATTERNBINDIR,PARAMBINDIR,"q15") 1175 configBinaryq7=Tools.Config(PATTERNBINDIR,PARAMBINDIR,"q7") 1176 1177 configBinaryf64.setOverwrite(False) 1178 configBinaryf32.setOverwrite(False) 1179 configBinaryf16.setOverwrite(False) 1180 configBinaryq31.setOverwrite(False) 1181 configBinaryq15.setOverwrite(False) 1182 configBinaryq7.setOverwrite(False) 1183 1184 1185 #writeBinaryTests(configBinaryf64,Tools.F32) 1186 #writeBinaryTests(configBinaryf32,Tools.F32) 1187 #writeBinaryTests(configBinaryf16,Tools.F16) 1188 #writeBinaryTests(configBinaryq31,Tools.Q31) 1189 #writeBinaryTests(configBinaryq15,Tools.Q15) 1190 #writeBinaryTests(configBinaryq7,Tools.Q7) 1191 1192 PATTERNUNDIR = os.path.join("Patterns","DSP","Matrix","Unary","Unary") 1193 PARAMUNDIR = os.path.join("Parameters","DSP","Matrix","Unary","Unary") 1194 1195 configUnaryf64=Tools.Config(PATTERNUNDIR,PARAMUNDIR,"f64") 1196 configUnaryf32=Tools.Config(PATTERNUNDIR,PARAMUNDIR,"f32") 1197 configUnaryf16=Tools.Config(PATTERNUNDIR,PARAMUNDIR,"f16") 1198 configUnaryq31=Tools.Config(PATTERNUNDIR,PARAMUNDIR,"q31") 1199 configUnaryq15=Tools.Config(PATTERNUNDIR,PARAMUNDIR,"q15") 1200 configUnaryq7=Tools.Config(PATTERNUNDIR,PARAMUNDIR,"q7") 1201 1202 configUnaryf64.setOverwrite(False) 1203 configUnaryf32.setOverwrite(False) 1204 configUnaryf16.setOverwrite(False) 1205 configUnaryq31.setOverwrite(False) 1206 configUnaryq15.setOverwrite(False) 1207 configUnaryq7.setOverwrite(False) 1208 1209 writeUnaryTests(configUnaryf64,Tools.F64) 1210 writeUnaryTests(configUnaryf32,Tools.F32) 1211 writeUnaryTests(configUnaryf16,Tools.F16) 1212 #writeUnaryTests(configUnaryq31,Tools.Q31) 1213 #writeUnaryTests(configUnaryq31,Tools.Q31) 1214 #writeUnaryTests(configUnaryq15,Tools.Q15) 1215 #writeUnaryTests(configUnaryq7,Tools.Q7) 1216 1217 #configUnaryf64.setOverwrite(True) 1218 #configUnaryf32.setOverwrite(True) 1219 #configUnaryf16.setOverwrite(True) 1220 testQR(configUnaryf64,Tools.F64) 1221 testQR(configUnaryf32,Tools.F32) 1222 testQR(configUnaryf16,Tools.F16) 1223 #testHouseholder(configUnaryf64,Tools.F32) 1224 #testHouseholder(configUnaryf32,Tools.F32) 1225 #testHouseholder(configUnaryf16,Tools.F32) 1226 1227 1228 1229 1230 1231 1232 1233if __name__ == '__main__': 1234 generatePatterns() 1235