def CompareProcedure(): with HDF5Reader('2Dlake_light.h5') as f: # TODO nothing is done with these metadata metadata = f.readMetadata() # reading the data attributes for determining the format dataAttributes = f.readDataAttributes() data = f.readData() print dataAttributes['intervals'] print dataAttributes[METADATA.resultformat_name] bargridoh = BarGridKernel.initFromHDF5(metadata, dataAttributes, data) hm = HDF5Manager([BarGridKernel]) bargrid = hm.readKernel('2Dlake_light.h5') bargrid2 = BarGridKernel.readPatrickSaintPierrebis('../samples/2D_light.txt') distancegriddimensions = [31,31] #[301,301] distancegridintervals = map(lambda e: e-1, distancegriddimensions) resizebargrid = bargrid.toBarGridKernel(bargrid.originCoords, bargrid.oppositeCoords, distancegridintervals) resizebargrid2 = bargrid2.toBarGridKernel(bargrid2.originCoords, bargrid2.oppositeCoords, distancegridintervals) print(bargrid.bars[0]) print(bargrid2.bars[0]) print(bargrid.bars[10000]) print(bargrid2.bars[10000]) for i in range(len(bargrid.bars)): if bargrid.bars[i][2]!=bargrid2.bars[i][2]: print bargrid.bars[i] print bargrid2.bars[i] print "merde" print(bargrid.originCoords) print(bargridoh.originCoords) print(bargrid.oppositeCoords) print(bargridoh.oppositeCoords) print(bargrid.intervalNumberperaxis) print(bargridoh.intervalNumberperaxis) print(bargrid.permutation) print(bargridoh.permutation) print(resizebargrid.bars[0]) print(resizebargrid2.bars[0]) print(resizebargrid.bars[30]) print(resizebargrid2.bars[30]) for i in range(len(resizebargrid.bars)): if resizebargrid.bars[i][2]!=resizebargrid2.bars[i][2]: print resizebargrid.bars[i] print resizebargrid2.bars[i] print "merde" print "youpi"
def writeViablesPointsHDF5(filename, dt, p0, l0, dp, dl, np, nl): with open(filename+".txt", 'w') as f: f.write("Pas de temps : {:f}\n".format(dt)) firstCol,tabp = computeTrajectoryP(dt, p0, l0, dp, dl, np, nl, umax, nmax, pmax, lmax, b, r, q, m) iLmin=ceil((lmin-l0)/dl) iLmax=floor((lmax-l0)/dl) iPmax=floor(pmax/dp) # preparing regulargridkernel grid=numpy.array([ i>=iLmin and i<=iLmax and j<=iPmax and (i<firstCol or (i<firstCol+len(tabp) and p0+j*dp<=tabp[i-firstCol])) for i in numpy.arange(nl) for j in numpy.arange(np) ]).reshape(np,nl) rgk = RegularGridKernel([p0,l0],[dp,dl]) rgk.setGrid(grid) # preparing gridbarkernel bars = [] for i in range(int(iLmin),int(iLmax+1)): viablesPoints=numpy.argwhere(grid[i]) if len(viablesPoints)>0: bars.append([i,viablesPoints[0][0],viablesPoints[-1][0]]) bgk = BarGridKernel([p0,l0],None, None, data=bars) # writing raw points for i in range(nl): for j in range(np): if grid[i,j]: f.write("{:f} {:f}\n".format(l0+i*dl,p0+j*dp)) HDF5Manager.writeKernel(rgk, filename+".h5", compression="gzip", compression_opts=9) writeHDF5_coords(rgk, filename+"_coords.h5", compression="gzip", compression_opts=9)
def testRead(): dataway = '../samples/2D.txt' metadataway = '../samples/2D_metadata.txt' h5way = '2D.h5' hm = HDF5Manager([BarGridKernel]) grid = BarGridKernel.readPatrickSaintPierrebis(dataway) myre = re.compile('^#(.*):(.*)$') with open(metadataway) as f: for line in f: if line.startswith('#'): k,v = myre.match(line).groups() grid.metadata[k.strip()]=v.strip() grid.metadata[METADATA.statedimension] = int(grid.metadata[METADATA.statedimension]) grid.metadata['results.submissiondate'] = time.strftime('%Y-%m-%d %H:%M',time.localtime()) print grid.permutation print grid.originCoords hm.writeKernel(grid, h5way) grid = [] # grid2 = hm.readKernel(h5way) # print(grid2.metadata) # print(metadata.category) # print(grid2.metadata[METADATA.category]) # print(grid2.metadata[METADATA.results_submissiondate]) # print(grid2.metadata[METADATA.results_formatparametervalues]) # print grid2.permutation # print grid2.originCoords # print(grid2.kernelMinPoint) # print(grid2.kernelMaxPoint) return grid
def CompareProcedure(): with HDF5Reader('2Dlake_light.h5') as f: # TODO nothing is done with these metadata metadata = f.readMetadata() # reading the data attributes for determining the format dataAttributes = f.readDataAttributes() data = f.readData() print dataAttributes['intervals'] print dataAttributes[METADATA.resultformat_title] bargridoh = BarGridKernel.initFromHDF5(metadata, dataAttributes, data) hm = HDF5Manager([BarGridKernel]) bargrid = hm.readKernel('2Dlake_light.h5') bargrid2 = FileFormatLoader.PspModifiedLoader().read( '../samples/2D_light.txt') distancegriddimensions = [31, 31] #[301,301] distancegridintervals = map(lambda e: e - 1, distancegriddimensions) resizebargrid = bargrid.toBarGridKernel(bargrid.originCoords, bargrid.oppositeCoords, distancegridintervals) resizebargrid2 = bargrid2.toBarGridKernel(bargrid2.originCoords, bargrid2.oppositeCoords, distancegridintervals) print(bargrid.bars[0]) print(bargrid2.bars[0]) print(bargrid.bars[10000]) print(bargrid2.bars[10000]) for i in range(len(bargrid.bars)): if bargrid.bars[i][2] != bargrid2.bars[i][2]: print bargrid.bars[i] print bargrid2.bars[i] print "merde" print(bargrid.originCoords) print(bargridoh.originCoords) print(bargrid.oppositeCoords) print(bargridoh.oppositeCoords) print(bargrid.intervalNumberperaxis) print(bargridoh.intervalNumberperaxis) print(bargrid.permutation) print(bargridoh.permutation) print(resizebargrid.bars[0]) print(resizebargrid2.bars[0]) print(resizebargrid.bars[30]) print(resizebargrid2.bars[30]) for i in range(len(resizebargrid.bars)): if resizebargrid.bars[i][2] != resizebargrid2.bars[i][2]: print resizebargrid.bars[i] print resizebargrid2.bars[i] print "merde" print "youpi"
def readFile(self, f): ''' Returns an object of class BarGridKernel loaded from an output file from the software of Patrick Saint-Pierre. ''' bgk = None origin = list(map(float, re.findall('-?\d+\.?\d*', f.readline()))) dimension = len(origin) if dimension == 0 : raise FileFormatException("Dimensions must be > 0") opposite = list(map(float, re.findall('-?\d+\.?\d*', f.readline()))) intervalNumber = list(map(int, re.findall('[0-9]+', f.readline()))) if dimension !=len(opposite) or dimension!=len(intervalNumber): raise FileFormatException("Dimensions of metadata mismatch") pointSize = list(map(int, re.findall('[0-9]+', f.readline()))) intervalNumber = [e//pointSize[0] for e in intervalNumber] # reading columns headers and deducing permutation of variables line = f.readline() columnNumbertoIgnore = len(re.findall('empty', line)) permutVector = list(map(int, re.findall('[0-9]+', line))) permutation = np.zeros(dimension * dimension,int).reshape(dimension,dimension) for i in range(dimension): permutation[i][permutVector[i]-1]=1 # Ok, creating the container object bgk = BarGridKernel(origin, opposite, intervalNumber,permutation) # ignoring lines until 'Initxx' stop=False while not stop: line = f.readline() if 'Initxx' in line: stop = True # reading bars stop = False while not stop: # using a while loop, because the for loop seems buggy with django InMemoryUploadedFile reading line = f.readline() if not line: stop = True else: coords = list(map(int, re.findall('[0-9]+', line))) coords = [e // pointSize[0] for e in coords] bgk.addBar(coords[columnNumbertoIgnore:-2], coords[-2], coords[-1]) # TODO what is done with modelMetadata and nbDim return bgk
def toBarGridKernel(self, newOriginCoords, newOppositeCoords, intervalNumberperaxis): ''' Convert to a BarGridKernel with another underlying grid, with a given number of intervals per axis. If no origin or opposite is given, it will be deduced from the lower or upper cell. Returns an instance of BarGridKernel. ''' minBoundsCoordinates = self.getMinBoundsCoordinates() intervalsSizes = (np.array([max([c[i+1] for c in self.cells]) for i in minBoundsCoordinates], float)-np.array([min([c[i] for c in self.cells]) for i in minBoundsCoordinates], float))/(np.array(intervalNumberperaxis)+np.array([1]*len(intervalNumberperaxis))) if not newOriginCoords: newOriginCoords = np.array([min([c[i] for c in self.cells]) for i in minBoundsCoordinates], float) + intervalsSizes / 2 else: newOriginCoords = np.array(newOriginCoords, float) if not newOppositeCoords: newOppositeCoords = np.array([max([c[i+1] for c in self.cells]) for i in minBoundsCoordinates], float) - intervalsSizes / 2 else: newOppositeCoords = np.array(newOppositeCoords, float) # newIntervalNumberperaxis = (newOppositeCoords - newOriginCoords) / intervalsSizes bgk = BarGridKernel(newOriginCoords, newOppositeCoords, intervalNumberperaxis) # print list(newOppositeCoords) # print list(intervalsSizes) for cell in self.cells: cell_start = [cell[i] for i in minBoundsCoordinates] cell_end = [cell[i+1] for i in minBoundsCoordinates] start_int = np.floor(np.array(intervalNumberperaxis) * (np.array(cell_start, float) + intervalsSizes / 2 - newOriginCoords)/(newOppositeCoords - newOriginCoords)) start_int = np.array([max(start_int[i],0) for i in range(len(start_int))],int) end_int = np.ceil(np.array(intervalNumberperaxis) * (np.array(cell_end, float) - intervalsSizes / 2 - newOriginCoords)/(newOppositeCoords - newOriginCoords)) end_int = np.array([min(end_int[i],intervalNumberperaxis[i]) for i in range(len(end_int))],int) # now adding all the points on the grid of the BGK between start and end of the Kd cell next_point = list(start_int[:-1]) bgk.addBar(next_point, start_int[-1], end_int[-1]) while any(next_point!=end_int[:-1]): for i,coord in reversed(list(enumerate(next_point))): if next_point[i] < end_int[i]: next_point[i] += 1 break else: next_point[i] = start_int[i] bgk.addBar(next_point, start_int[-1], end_int[-1]) return bgk
def readFile(self, f): metadata={} bgk = None f.readline() nbDim = re.match('\s*([0-9]*)\s.*',f.readline()).group(1) metadata[METADATA.dynamicsdescription] = f.readline() metadata[METADATA.stateconstraintdescription] = f.readline() metadata[METADATA.targetdescription] = f.readline() for i in range(4): f.readline() dimensionsSteps = list(map(int, re.findall('[0-9]+', f.readline()))) for i in range(2): f.readline() origin = list(map(int, re.findall('[0-9]+', f.readline()))) maxPoint = list(map(int, re.findall('[0-9]+', f.readline()))) for i in range(5): f.readline() # ND Why? Why not opposite = maxPoint opposite = origin bgk = BarGridKernel(origin, opposite, dimensionsSteps, metadata=metadata) # reading until some lines with 'Initxx' stop=False initxx=False # ND Why restrict min/max point to integer position bgk.kernelMinPoint = [e//1 for e in origin] bgk.kernelMaxPoint = [e//1 for e in maxPoint] while not stop: line = f.readline() if 'Initxx' in line: initxx = True elif initxx and 'Initxx' not in line: stop = True # reading bars for line in f: coords = list(map(int, re.findall('[0-9]+', line))) # ND Why convert point to integer position coords = [e//1 for e in coords] bgk.addBar(coords[2:-2], coords[-2], coords[-1]) # TODO what is done with modelMetadata and nbDim return bgk
else : histodict['0'] = self.totalpointNumber() occurnumber[0] = self.totalpointNumber() return histodict if __name__ == "__main__": import time norm = EucNorm() # bargrid = BarGridKernel([0,0], [10,10], [10,10]) # bargrid.addBar([1],3,7) # bargrid.addBar([2],5,5) # bargrid.addBar([3],0,10) bargrid = BarGridKernel.readPatrickSaintPierrebis('../samples/2D_light.txt') distancegriddimensions = [31,31]#[2001,2001] distancegridintervals = map(lambda e: e-1, distancegriddimensions) print "of" print distancegridintervals print bargrid.kernelMinPoint print bargrid.kernelMaxPoint startTime = time.time() resizebargrid = bargrid.toBarGridKernel(bargrid.originCoords, bargrid.oppositeCoords, distancegridintervals) readTime = time.time() - startTime print('resize in {:.2f}s'.format(readTime)) resizebargrid2 = bargrid.toBarGridKernel(bargrid.originCoords, bargrid.oppositeCoords, distancegridintervals) for bar in resizebargrid2.bars: