예제 #1
0
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"
예제 #2
0
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)
예제 #3
0
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
예제 #4
0
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"
예제 #5
0
 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
예제 #6
0
 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
예제 #7
0
    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
예제 #8
0
    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
예제 #9
0
 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
예제 #10
0
	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: