Possible bug

From: Deepak Chandan <dchandan_at_nyahnyahspammersnyahnyah>
Date: Fri Jul 29 2011 - 11:08:31 MDT

Hi all,
I have an object-oriented system of plotting routines that I use for my research. It has plot objects (of different types) that have associated properties which are used in processing, including creating plots. To plot the objects I call a pyngl script (given below) that plots the data using information stored in the object. Now, the problem I am having is that between two calls to this pyngl routine, I am getting the following error:

fatal:["Error.c":411]:ErrorInitialize:Only one instance of ErrorClass is supported
fatal:Unable to initialize layer-Can't Create
fatal:Error Creating ErrorClass object
fatal:Unable to initialize layer-Can't Create
fatal:Unable to initialize layer-Can't Create
fatal:_NhlCreate:Unable to access "default" App object
fatal:PID #-4 can't be found in NhlSetValues
fatal:_NhlCreate:Unable to access "default" App object
fatal:_NhlCreate:Invalid Parent id #-4
fatal:NhlGetValues:PID #-4 is invalid
fatal:NhlGetValues:PID #-4 is invalid
Python(39345,0xac7512c0) malloc: *** mmap(size=4294918144) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Bus error: 10

For example, suppose I am working in IPython, I create a plot object:
$$> p = obsplot(id=90834) #where id is the ID number of a particular computation
$$> p.plot()
This works; now if I create another object and plot it, I get the above error from the plot script. I cannot understand why this should happen. Maybe someone can help me out here. I am working on a Mac, current version 10.7, (although this problem was present in the previous version 10.6.7 as well). My PyNIO and PyNGL version numbers are 1.4.0 and 1.3.1 respectively. Python version is 2.7.2 and bumpy version is 1.5.1. Using print statements, I have figured that the problem originates at the Ngl.open_wks statement in the code.

Thank you for looking into this.

Sincerely,
Deepak Chandan

The plotting script is:

=============================== CODE BEGIN ======================================
def nclplot2d(obj, *args, **kwargs):
        import os
        import Nio
        import Ngl
        import numpy as np
        keys = kwargs.keys()
        
        file1 = Nio.open_file(os.path.join(obj._datadir, obj._datafile), "r")
        data = file1.variables["gdata"][:]*obj._unitsfactor
        lon = file1.variables["lon"][:]
        lat = file1.variables["lat"][:]
        mmax = data.max()
        mmin = data.min()
        allm = max(abs(mmax), abs(mmin))
        digits = 0
        digits = countdigits(int(allm), digits)
        lbfmt = "@.%d;1f" % (digits)
        if not "wks" in keys:
                wks_type = "pdf"
        else:
                wks_type = kwargs["wks"]
        if not ("proj" in keys):
                proj = obj._projection
        else:
                proj = kwargs["proj"]
                obj._projection = proj
        if not ("clbrpos" in keys):
                clbrpos = "Horizontal"
        else:
                clbrpos = kwargs["clbrpos"]
        if not ("cntrnum" in keys):
                cntrnum = obj._cntrnum
        else:
                cntrnum = kwargs["cntrnum"]
                obj._cntrnum = cntrnum
        if not ("stride" in keys):
                if cntrnum <= 10:
                        stride = 1
                elif 10 < cntrnum <=20:
                        stride = 2
                elif 20 < cntrnum <= 30:
                        stride = 3
        else:
                stride = kwargs["kwargs"]
        if not ("langle" in keys):
                langle = 0
        else:
                langle = kwargs["langle"]
        
        
        if clbrpos == "Horizontal":
                lbw = 0.6
                lbh = 0.1
                side = "Bottom"
        else:
                lbw = 0.1
                lbh = 0.6
                side = "Right"
        
        wrkstn = Ngl.open_wks(wks_type, os.path.join(obj._figdir, obj._figfile))
        BlueOrangeYellow = np.array([[256,256,256],[5, 35, 80],[5, 37, 83],[5, 39, 86], [5, 40, 89], [5, 42, 92],\
         [6, 44, 95],[6, 46, 98],[6, 48, 100],[6, 49, 103],[6, 51, 106], [6, 53, 109],\
         [6, 55, 112], [6, 57, 115], [7, 59, 118], [7, 60, 121], [7, 62, 124], [7, 64, 127],\
         [7, 66, 130], [7, 68, 133], [7, 69, 136], [7, 71, 138], [7, 73, 141], [8, 75, 144],\
         [8, 77, 147], [8, 78, 150], [8, 82, 156], [10, 84, 158], [12, 87, 159], [15, 89, 161],\
         [17, 92, 163], [19, 94, 164], [21, 97, 166], [24, 99, 168], [26, 102, 169], [28, 104, 171],\
         [30, 107, 173], [33, 109, 174], [35, 112, 176], [37, 114, 178], [39, 116, 179],\
         [41, 119, 181], [44, 121, 182], [46, 124, 184], [48, 126, 186], [50, 129, 187], [53, 131, 189],\
         [55, 134, 191], [57, 136, 192], [59, 139, 194], [62, 141, 196], [66, 146, 199], [68, 147, 200],\
         [69, 149, 200], [71, 150, 201], [72, 152, 201], [74, 153, 202], [76, 155, 202], [77, 156, 203],\
         [79, 157, 204], [81, 159, 204], [82, 160, 205], [84, 162, 205], [85, 163, 206], [87, 165, 207],\
         [89, 166, 207], [90, 167, 208], [92, 169, 208], [93, 170, 209], [95, 172, 209], [97, 173, 210],\
         [98, 174, 211], [100, 176, 211],[102, 177, 212], [103, 179, 212], [105, 180, 213], [106, 182, 213],\
         [108, 183, 214], [110, 184, 215], [113, 186, 215], [115, 187, 216], [118, 189, 216], [120, 190, 217],\
         [122, 192, 218], [125, 193, 218], [127, 194, 219], [129, 196, 220], [132, 197, 220], [134, 199, 221],\
         [137, 200, 221], [139, 202, 222], [141, 203, 223], [144, 204, 223], [146, 206, 224], [149, 207, 224],\
         [151, 209, 225], [153, 210, 226], [156, 211, 226], [158, 213, 227], [160, 214, 228], [163, 216, 228],\
         [165, 217, 229], [170, 220, 230], [172, 221, 231], [174, 222, 232], [176, 223, 233], [178, 224, 234],\
         [179, 225, 235], [181, 226, 236], [183, 227, 237], [185, 228, 238], [187, 229, 239], [189, 230, 240],\
         [191, 231, 241], [193, 232, 242], [195, 233, 243], [196, 233, 243], [198, 234, 244], [200, 235, 245],\
         [202, 236, 246], [204, 237, 247], [206, 238, 248], [208, 239, 249], [210, 240, 250], [211, 241, 251],\
         [213, 242, 252], [215, 243, 253], [219, 245, 255], [255, 255, 200], [255, 254, 197], [255, 253, 193],\
         [255, 252, 190], [255, 251, 187], [255, 250, 184], [255, 249, 180], [255, 248, 177], [255, 247, 174],\
         [255, 246, 171], [255, 245, 167], [255, 244, 164], [255, 243, 161], [255, 243, 158], [255, 242, 154],\
         [255, 241, 151], [255, 240, 148], [255, 239, 144], [255, 238, 141], [255, 237, 138], [255, 236, 135],\
         [255, 235, 131], [255, 234, 128], [255, 233, 125], [255, 232, 122], [255, 230, 115], [255, 229, 113],\
         [254, 227, 111], [254, 226, 109], [253, 225, 108], [253, 224, 106], [252, 222, 104], [252, 221, 102],\
         [251, 220, 100], [251, 219, 98], [250, 217, 97], [250, 216, 95], [249, 215, 93], [249, 214, 91],\
         [248, 212, 89], [248, 211, 87], [247, 210, 85], [247, 208, 84], [246, 207, 82], [246, 206, 80],\
         [245, 205, 78], [245, 203, 76], [244, 202, 74], [244, 201, 73], [243, 200, 71], [242, 197, 67],\
         [242, 194, 65], [241, 191, 63], [241, 188, 62], [240, 185, 60], [240, 182, 58], [239, 179, 56],\
         [239, 176, 54], [238, 173, 53], [238, 170, 51], [237, 167, 49], [237, 164, 47], [236, 161, 45],\
         [236, 159, 44], [236, 156, 42], [235, 153, 40], [235, 150, 38], [234, 147, 36], [234, 144, 34],\
         [233, 141, 33], [233, 138, 31], [232, 135, 29], [232, 132, 27], [231, 129, 25], [231, 126, 24],\
         [230, 123, 22], [230, 120, 20], [229, 118, 19], [228, 116, 18], [227, 114, 18], [225, 112, 17],\
         [224, 110, 16], [223, 108, 15], [222, 107, 15], [221, 105, 14], [220, 103, 13], [218, 101, 12],\
         [217, 99, 12], [216, 97, 11], [215, 95, 10], [214, 93, 9], [213, 91, 8], [212, 89, 8], [210, 87, 7],\
         [209, 85, 6], [208, 83, 5], [207, 82, 5], [206, 80, 4], [205, 78, 3], [203, 76, 2], [202, 74, 2],\
         [200, 70, 0], [198, 69, 1], [195, 68, 2], [193, 67, 3], [190, 65, 4], [188, 64, 4], [185, 63, 5],\
         [183, 62, 6], [180, 61, 7], [178, 60, 8], [175, 58, 9], [173, 57, 10], [170, 56, 11], [168, 55, 12],\
         [165, 54, 12], [163, 53, 13], [160, 52, 14], [158, 50, 15], [155, 49, 16], [153, 48, 17],\
         [150, 47, 18], [148, 46, 19], [145, 45, 19], [143, 43, 20], [140, 42, 21], [135, 40, 23]],'f')
        
        BlueOrangeYellow = BlueOrangeYellow/256.
        rlist = Ngl.Resources()
        rlist.wkColorMap = BlueOrangeYellow
        Ngl.set_values(wrkstn,rlist)
        resources = Ngl.Resources()
        resources.nglSpreadColors = True
        
        resources.sfXCStartV = min(lon)
        resources.sfXCEndV = max(lon)
        resources.sfYCStartV = max(lat)
        resources.sfYCEndV = min(lat)
        
        resources.tiMainString = obj._title
        resources.tiMainFont = "Helvetica" # Font for title
        resources.tiMainFontHeightF = 0.012
        # resources.tiXAxisString = "Longitude"
        # resources.tiYAxisString = "Latitude"
        # resources.tiXAxisFont = "Helvetica" # Font for X axis label
        # resources.tiYAxisFont = "Helvetica" # Font for Y axis label
        # resources.tiXAxisFontHeightF =
        # resources.tiYAxisFontHeightF =
        
        
        resources.cnFillOn = True
        resources.cnLinesOn = False
        resources.cnLineLabelsOn = False
        resources.cnLevelSelectionMode = "ManualLevels"
        resources.cnMaxLevelCount = cntrnum
        resources.cnMinLevelValF = -1.*allm
        resources.cnMaxLevelValF = 1.*allm
        resources.cnLevelSpacingF = (2*allm)/cntrnum
        resources.cnLineLabelFormat = lbfmt
        
        resources.lbAutoManage = False
        resources.lbOrientation = clbrpos
        resources.lbLabelFont = "Helvetica"
        # resources.lbLabelPosition = "Center"
        resources.lbLabelFontHeightF = .010
        resources.lbLabelAngleF = langle
        resources.lbLabelStride = stride
        resources.pmLabelBarSide = side
        resources.pmLabelBarWidthF = lbw
        resources.pmLabelBarHeightF = lbh
        
        resources.lbTitleString = obj._clbrtitle
        resources.lbTitlePosition = "Top"
        resources.lbTitleDirection = "Across"
        resources.lbTitleFont = "Helvetica-Bold"
        resources.lbTitleFontHeightF = .011
        
        resources.mpProjection = proj
        resources.mpCenterLonF = obj._clon
        resources.mpCenterLatF = 0.
        resources.mpDataBaseVersion = "MediumRes"
        resources.mpGridAndLimbOn = True
        resources.mpPerimOn = False
        resources.mpGridLatSpacingF = 30.
        resources.mpGridLonSpacingF = 30.
        resources.mpFillOn = False
        
        
        contour = Ngl.contour_map(wrkstn, data, resources)
        del contour
        del resources
        del rlist
        del wrkstn
        
        file1.close()
        Ngl.end()
        from pyPdf import PdfFileWriter, PdfFileReader
        output = PdfFileWriter()
        input1 = PdfFileReader(file(os.path.join(obj._figdir, obj._figfile)+"."+wks_type, "rb"))
        output.addPage(input1.getPage(0).rotateCounterClockwise(90))
        outputStream = file("/Users/dchandan/temp/ps2pdf.temp.pdf", "wb")
        output.write(outputStream)
        outputStream.close()
        import shutil
        shutil.copy2("/Users/dchandan/temp/ps2pdf.temp.pdf", os.path.join(obj._figdir, obj._figfile)+"."+wks_type)
        os.remove("/Users/dchandan/temp/ps2pdf.temp.pdf")

============================= CODE END =======================================

The plot code that calls the above nclplot2d routine is:

def plot(self, *args, **kwargs):
        from nclplot2d import nclplot2d
        nclplot2d(self, *args, **kwargs)

_______________________________________________
pyngl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/pyngl-talk
Received on Fri Jul 29 11:08:38 2011

This archive was generated by hypermail 2.1.8 : Mon Sep 12 2011 - 16:03:35 MDT