Changeset 1118


Ignore:
Timestamp:
08/09/06 16:54:14 (18 years ago)
Author:
mar637
Message:

fixes for pylint reported violations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/python/scantable.py

    r1115 r1118  
    11from asap._asap import Scantable
    22from asap import rcParams
    3 from asap import print_log, asaplog
     3from asap import print_log
     4from asap import asaplog
    45from asap import selector
    5 from numarray import ones,zeros
    6 import sys
     6from numarray import ones
     7from numarray import zeros
    78
    89class scantable(Scantable):
     
    3233        if average is None:
    3334            average = rcParams['scantable.autoaverage']
    34         varlist = vars()
     35        #varlist = vars()
    3536        from asap._asap import stmath
    3637        self._math = stmath()
     
    3839            Scantable.__init__(self, filename)
    3940        else:
    40             if isinstance(filename,str):
     41            if isinstance(filename, str):
    4142                import os.path
    4243                filename = os.path.expandvars(filename)
     
    5051                    raise IOError(s)
    5152                if os.path.isdir(filename) \
    52                    and not os.path.exists(filename+'/table.f1'):
     53                    and not os.path.exists(filename+'/table.f1'):
    5354                    # crude check if asap table
    5455                    if os.path.exists(filename+'/table.info'):
    55                         Scantable.__init__(self, filename, rcParams['scantable.storage']=='disk')
     56                        ondisk = rcParams['scantable.storage'] == 'disk'
     57                        Scantable.__init__(self, filename, ondisk)
    5658                        if unit is not None:
    5759                            self.set_fluxunit(unit)
    5860                        self.set_freqframe(rcParams['scantable.freqframe'])
    5961                    else:
    60                         msg = "The given file '%s'is not a valid asap table." % (filename)
     62                        msg = "The given file '%s'is not a valid " \
     63                              "asap table." % (filename)
    6164                        if rcParams['verbose']:
    6265                            print msg
     
    6568                            raise IOError(msg)
    6669                else:
    67                     self._fill([filename],unit, average)
    68             elif (isinstance(filename,list) or isinstance(filename,tuple)) \
     70                    self._fill([filename], unit, average)
     71            elif (isinstance(filename, list) or isinstance(filename, tuple)) \
    6972                  and isinstance(filename[-1], str):
    7073                self._fill(filename, unit, average)
     
    9093        Example:
    9194            scan.save('myscan.asap')
    92             scan.save('myscan.sdfits','SDFITS')
     95            scan.save('myscan.sdfits', 'SDFITS')
    9396        """
    9497        from os import path
    9598        if format is None: format = rcParams['scantable.save']
    9699        suffix = '.'+format.lower()
    97         if name is None or name =="":
     100        if name is None or name == "":
    98101            name = 'scantable'+suffix
    99             from asap import asaplog
    100102            msg = "No filename given. Using default name %s..." % name
    101103            asaplog.push(msg)
     
    114116        else:
    115117            from asap._asap import stwriter as stw
    116             w = stw(format2)
    117             w.write(self, name)
     118            writer = stw(format2)
     119            writer.write(self, name)
    118120        print_log()
    119121        return
     
    150152            allscans = unique([ self.getscan(i) for i in range(self.nrow())])
    151153            for sid in scanid: allscans.remove(sid)
    152             if len(allscans) == 0: raise ValueError("Can't remove all scans")
     154            if len(allscans) == 0:
     155                raise ValueError("Can't remove all scans")
    153156        except ValueError:
    154157            if rcParams['verbose']:
     
    165168            return scantable(scopy)
    166169        except RuntimeError:
    167             if rcParams['verbose']: print "Couldn't find any match."
    168             else: raise
     170            if rcParams['verbose']:
     171                print "Couldn't find any match."
     172            else:
     173                raise
    169174
    170175
     
    183188            refscans = scan.get_scan('*_R')
    184189            # get a susbset of scans by scanno (as listed in scan.summary())
    185             newscan = scan.get_scan([0,2,7,10])
     190            newscan = scan.get_scan([0, 2, 7, 10])
    186191        """
    187192        if scanid is None:
    188193            if rcParams['verbose']:
    189                 print "Please specify a scan no or name to retrieve from the scantable"
     194                print "Please specify a scan no or name to " \
     195                      "retrieve from the scantable"
    190196                return
    191197            else:
     
    224230
    225231    def __str__(self):
    226         return Scantable._summary(self,True)
     232        return Scantable._summary(self, True)
    227233
    228234    def summary(self, filename=None):
     
    282288        Examples:
    283289            sel = selector()         # create a selection object
    284             self.set_scans([0,3])    # select SCANNO 0 and 3
     290            self.set_scans([0, 3])    # select SCANNO 0 and 3
    285291            scan.set_selection(sel)  # set the selection
    286292            scan.summary()           # will only print summary of scanno 0 an 3
     
    288294        """
    289295        self._setselection(selection)
    290 
    291     def set_cursor(self, beam=0, IF=0, pol=0):
    292         print "DEPRECATED - use set_selection"
    293 
    294     def get_cursor(self):
    295         print "DEPRECATED - use get_selection"
    296296
    297297    def stats(self, stat='stddev', mask=None):
     
    307307        Example:
    308308            scan.set_unit('channel')
    309             msk = scan.create_mask([100,200],[500,600])
     309            msk = scan.create_mask([100, 200], [500, 600])
    310310            scan.stats(stat='mean', mask=m)
    311311        """
    312         from numarray import array,zeros,Float
    313312        if mask == None:
    314313            mask = []
    315         axes = ['Beam','IF','Pol','Time']
     314        axes = ['Beam', 'IF', 'Pol', 'Time']
    316315        if not self._check_ifs():
    317              raise ValueError("Cannot apply mask as the IFs have different number of channels"
    318                               "Please use setselection() to select individual IFs")
     316            raise ValueError("Cannot apply mask as the IFs have different "
     317                             "number of channels. Please use setselection() "
     318                             "to select individual IFs")
    319319
    320320        statvals = self._math._stats(self, mask, stat)
     
    341341        if rcParams['verbose']:
    342342            print "--------------------------------------------------"
    343             print " ",stat
     343            print " ", stat
    344344            print "--------------------------------------------------"
    345345            print out
    346         retval = { 'axesnames': ['scanno','beamno','ifno','polno','cycleno'],
     346        retval = { 'axesnames': ['scanno', 'beamno', 'ifno', 'polno', 'cycleno'],
    347347                   'axes' : axes,
    348348                   'data': statvals}
    349349        return retval
    350350
    351     def stddev(self,mask=None):
     351    def stddev(self, mask=None):
    352352        """
    353353        Determine the standard deviation of the current beam/if/pol
     
    360360        Example:
    361361            scan.set_unit('channel')
    362             msk = scan.create_mask([100,200],[500,600])
     362            msk = scan.create_mask([100, 200], [500, 600])
    363363            scan.stddev(mask=m)
    364364        """
    365         return self.stats(stat='stddev',mask=mask);
     365        return self.stats(stat='stddev', mask=mask);
    366366
    367367
     
    385385    def _row_callback(self, callback, label):
    386386        axes = []
    387         axesnames = ['scanno','beamno','ifno','polno','cycleno']
     387        axesnames = ['scanno', 'beamno', 'ifno', 'polno', 'cycleno']
    388388        out = ""
    389         outvec =[]
     389        outvec = []
    390390        for i in range(self.nrow()):
    391391            axis = []
     
    495495        Parameters:
    496496            unit:    optional unit, default is 'channel'
    497                      one of '*Hz','km/s','channel', ''
    498         """
    499         varlist = vars()
    500         if unit in ['','pixel', 'channel']:
     497                     one of '*Hz', 'km/s', 'channel', ''
     498        """
     499        varlist = vars()
     500        if unit in ['', 'pixel', 'channel']:
    501501            unit = ''
    502502        inf = list(self._getcoordinfo())
    503503        inf[0] = unit
    504504        self._setcoordinfo(inf)
    505         self._add_history("set_unit",varlist)
     505        self._add_history("set_unit", varlist)
    506506
    507507    def set_instrument(self, instr):
     
    513513        """
    514514        self._setInstrument(instr)
    515         self._add_history("set_instument",vars())
     515        self._add_history("set_instument", vars())
    516516        print_log()
    517517
     
    526526        inf[2] = doppler
    527527        self._setcoordinfo(inf)
    528         self._add_history("set_doppler",vars())
     528        self._add_history("set_doppler", vars())
    529529        print_log()
    530530
     
    534534        Parameters:
    535535            frame:   an optional frame type, default 'LSRK'. Valid frames are:
    536                      'REST','TOPO','LSRD','LSRK','BARY',
    537                      'GEO','GALACTO','LGROUP','CMB'
     536                     'REST', 'TOPO', 'LSRD', 'LSRK', 'BARY',
     537                     'GEO', 'GALACTO', 'LGROUP', 'CMB'
    538538        Examples:
    539539            scan.set_freqframe('BARY')
     
    541541        if frame is None: frame = rcParams['scantable.freqframe']
    542542        varlist = vars()
    543         valid = ['REST','TOPO','LSRD','LSRK','BARY', \
    544                    'GEO','GALACTO','LGROUP','CMB']
     543        valid = ['REST', 'TOPO', 'LSRD', 'LSRK', 'BARY', \
     544                   'GEO', 'GALACTO', 'LGROUP', 'CMB']
    545545
    546546        if frame in valid:
     
    548548            inf[1] = frame
    549549            self._setcoordinfo(inf)
    550             self._add_history("set_freqframe",varlist)
     550            self._add_history("set_freqframe", varlist)
    551551        else:
    552             msg  = "Please specify a valid freq type. Valid types are:\n",valid
     552            msg  = "Please specify a valid freq type. Valid types are:\n", valid
    553553            if rcParams['verbose']:
    554554                print msg
     
    569569        try:
    570570            Scantable.set_dirframe(self, frame)
    571         except RuntimeError,msg:
     571        except RuntimeError, msg:
    572572            if rcParams['verbose']:
    573573                print msg
    574574            else:
    575575                raise
    576         self._add_history("set_dirframe",varlist)
     576        self._add_history("set_dirframe", varlist)
    577577
    578578    def get_unit(self):
     
    603603        return abc, lbl
    604604
    605     def flag(self, mask=[]):
     605    def flag(self, mask=None):
    606606        """
    607607        Flag the selected data using an optional channel mask.
     
    611611        """
    612612        varlist = vars()
     613        if mask is None:
     614            mask = []
    613615        try:
    614616            self._flag(mask)
    615         except RuntimeError,msg:
     617        except RuntimeError, msg:
    616618            if rcParams['verbose']:
    617619                print msg
     
    623625    def create_mask(self, *args, **kwargs):
    624626        """
    625         Compute and return a mask based on [min,max] windows.
     627        Compute and return a mask based on [min, max] windows.
    626628        The specified windows are to be INCLUDED, when the mask is
    627629        applied.
    628630        Parameters:
    629             [min,max],[min2,max2],...
     631            [min, max], [min2, max2], ...
    630632                Pairs of start/end points (inclusive)specifying the regions
    631633                to be masked
     
    639641            scan.set_unit('channel')
    640642            a)
    641             msk = scan.create_mask([400,500],[800,900])
     643            msk = scan.create_mask([400, 500], [800, 900])
    642644            # masks everything outside 400 and 500
    643645            # and 800 and 900 in the unit 'channel'
    644646
    645647            b)
    646             msk = scan.create_mask([400,500],[800,900], invert=True)
     648            msk = scan.create_mask([400, 500], [800, 900], invert=True)
    647649            # masks the regions between 400 and 500
    648650            # and 800 and 900 in the unit 'channel'
    649651            c)
    650652            mask only channel 400
    651             msk =  scan.create_mask([400,400])
     653            msk =  scan.create_mask([400, 400])
    652654        """
    653655        row = 0
     
    658660        if rcParams['verbose']:
    659661            if u == "": u = "channel"
    660             from asap import asaplog
    661662            msg = "The current mask window unit is %s" % u
    662             if not self._check_ifs():
     663            i = self._check_ifs()
     664            if not i:
    663665                msg += "\nThis mask is only valid for IF=%d" % (self.getif(i))
    664666            asaplog.push(msg)
     
    667669        # test if args is a 'list' or a 'normal *args - UGLY!!!
    668670
    669         ws = (isinstance(args[-1][-1],int) or isinstance(args[-1][-1],float)) and args or args[0]
     671        ws = (isinstance(args[-1][-1], int) or isinstance(args[-1][-1], float)) \
     672             and args or args[0]
    670673        for window in ws:
    671674            if (len(window) != 2 or window[0] > window[1] ):
    672                 raise TypeError("A window needs to be defined as [min,max]")
     675                raise TypeError("A window needs to be defined as [min, max]")
    673676            for i in range(n):
    674677                if data[i] >= window[0] and data[i] <= window[1]:
     
    704707        the restfrequency set per IF according
    705708        to the corresponding value you give in the 'freqs' vector.
    706         E.g. 'freqs=[1e9,2e9]'  would mean IF 0 gets restfreq 1e9 and
     709        E.g. 'freqs=[1e9, 2e9]'  would mean IF 0 gets restfreq 1e9 and
    707710        IF 1 gets restfreq 2e9.
    708711        You can also specify the frequencies via known line names
     
    717720            # If thee number of IFs in the data is >= 2 the IF0 gets the first
    718721            # value IF1 the second...
    719             scan.set_restfreqs(freqs=[1.4e9,1.67e9])
     722            scan.set_restfreqs(freqs=[1.4e9, 1.67e9])
    720723            #set the given restfrequency for the whole table (by name)
    721724            scan.set_restfreqs(freqs="OH1667")
     
    736739
    737740        t = type(freqs)
    738         if isinstance(freqs, int) or isinstance(freqs,float):
    739            self._setrestfreqs(freqs, unit)
    740         elif isinstance(freqs, list) or isinstance(freqs,tuple):
    741             if isinstance(freqs[-1], int) or isinstance(freqs[-1],float):
     741        if isinstance(freqs, int) or isinstance(freqs, float):
     742            self._setrestfreqs(freqs, unit)
     743        elif isinstance(freqs, list) or isinstance(freqs, tuple):
     744            if isinstance(freqs[-1], int) or isinstance(freqs[-1], float):
    742745                sel = selector()
    743746                savesel = self._getselection()
     
    771774                for i in items:
    772775                    s = i.split("=")
    773                     out += "\n   %s = %s" % (s[0],s[1])
     776                    out += "\n   %s = %s" % (s[0], s[1])
    774777                out += "\n"+"-"*80
    775778        try:
     
    814817        if scanav: scanav = "SCAN"
    815818        else: scanav = "NONE"
    816         scan = (self,)
     819        scan = (self, )
    817820        try:
    818           if align:
    819               scan = (self.freq_align(insitu=False),)
    820           s = None
    821           if weight.upper() == 'MEDIAN':
    822               s = scantable(self._math._averagechannel(scan[0], 'MEDIAN', scanav))
    823           else:
    824               s = scantable(self._math._average(scan, mask, weight.upper(),
    825                         scanav))
    826         except RuntimeError,msg:
     821            if align:
     822                scan = (self.freq_align(insitu=False), )
     823            s = None
     824            if weight.upper() == 'MEDIAN':
     825                s = scantable(self._math._averagechannel(scan[0], 'MEDIAN',
     826                                                         scanav))
     827            else:
     828                s = scantable(self._math._average(scan, mask, weight.upper(),
     829                              scanav))
     830        except RuntimeError, msg:
    827831            if rcParams['verbose']:
    828832                print msg
     
    908912        varlist = vars()
    909913        if poly is None:
    910            poly = ()
     914            poly = ()
    911915        from os.path import expandvars
    912916        filename = expandvars(filename)
     
    975979        varlist = vars()
    976980        s = scantable(self._math._bin(self, width))
    977         s._add_history("bin",varlist)
     981        s._add_history("bin", varlist)
    978982        print_log()
    979983        if insitu: self._assign(s)
     
    9961000        varlist = vars()
    9971001        s = scantable(self._math._resample(self, method, width))
    998         s._add_history("resample",varlist)
     1002        s._add_history("resample", varlist)
    9991003        print_log()
    10001004        if insitu: self._assign(s)
     
    10161020            mask = ()
    10171021        s = scantable(self._math._averagepol(self, mask, weight.upper()))
    1018         s._add_history("average_pol",varlist)
     1022        s._add_history("average_pol", varlist)
    10191023        print_log()
    10201024        return s
     
    10301034        try:
    10311035            s = scantable(self._math._convertpol(self, poltype))
    1032         except RuntimeError,msg:
     1036        except RuntimeError, msg:
    10331037            if rcParams['verbose']:
    1034               print msg
    1035               return
     1038                print msg
     1039                return
    10361040            else:
    10371041                raise
    1038         s._add_history("convert_pol",varlist)
     1042        s._add_history("convert_pol", varlist)
    10391043        print_log()
    10401044        return s
     
    10611065        self._math._setinsitu(insitu)
    10621066        varlist = vars()
    1063         s = scantable(self._math._smooth(self,kernel.lower(),width))
     1067        s = scantable(self._math._smooth(self, kernel.lower(), width))
    10641068        s._add_history("smooth", varlist)
    10651069        print_log()
     
    10891093        varlist = vars()
    10901094        if mask is None:
    1091             from numarray import ones
    10921095            mask = list(ones(self.nchan(-1)))
    10931096        from asap.asapfitter import fitter
     
    11011104        else: return s
    11021105
    1103     def auto_poly_baseline(self, mask=[], edge=(0,0), order=0,
     1106    def auto_poly_baseline(self, mask=[], edge=(0, 0), order=0,
    11041107                           threshold=3, plot=False, insitu=None):
    11051108        """
     
    11381141
    11391142        # check whether edge is set up for each IF individually
    1140         individualEdge = False;
    1141         if len(edge)>1:
    1142            if isinstance(edge[0],list) or isinstance(edge[0],tuple):
    1143                individualEdge = True;
    1144 
    1145         if not _is_valid(edge, int) and not individualEdge:
     1143        individualedge = False;
     1144        if len(edge) > 1:
     1145            if isinstance(edge[0], list) or isinstance(edge[0], tuple):
     1146                individualedge = True;
     1147
     1148        if not _is_valid(edge, int) and not individualedge:
    11461149            raise ValueError, "Parameter 'edge' has to be an integer or a \
    11471150            pair of integers specified as a tuple. Nested tuples are allowed \
    11481151            to make individual selection for different IFs."
    11491152
    1150         curedge = (0,0)
    1151         if individualEdge:
    1152            for edge_par in edge:
    1153                if not _is_valid(edge,int):
    1154                   raise ValueError, "Each element of the 'edge' tuple has \
    1155                   to be a pair of integers or an integer."
     1153        curedge = (0, 0)
     1154        if individualedge:
     1155            for edgepar in edge:
     1156                if not _is_valid(edgepar, int):
     1157                    raise ValueError, "Each element of the 'edge' tuple has \
     1158                                       to be a pair of integers or an integer."
    11561159        else:
    1157            curedge = edge;
     1160            curedge = edge;
    11581161
    11591162        # setup fitter
     
    11621165
    11631166        # setup line finder
    1164         fl=linefinder()
     1167        fl = linefinder()
    11651168        fl.set_options(threshold=threshold)
    11661169
    11671170        if not insitu:
    1168             workscan=self.copy()
     1171            workscan = self.copy()
    11691172        else:
    1170             workscan=self
     1173            workscan = self
    11711174
    11721175        fl.set_scan(workscan)
    11731176
    1174         rows=range(workscan.nrow())
    1175         from asap import asaplog
     1177        rows = range(workscan.nrow())
    11761178        asaplog.push("Processing:")
    11771179        for r in rows:
    1178             msg = " Scan[%d] Beam[%d] IF[%d] Pol[%d] Cycle[%d]" %        (workscan.getscan(r),workscan.getbeam(r),workscan.getif(r),workscan.getpol(r), workscan.getcycle(r))
     1180            msg = " Scan[%d] Beam[%d] IF[%d] Pol[%d] Cycle[%d]" % \
     1181                (workscan.getscan(r), workscan.getbeam(r), workscan.getif(r), \
     1182                 workscan.getpol(r), workscan.getcycle(r))
    11791183            asaplog.push(msg, False)
    11801184
    11811185            # figure out edge parameter
    1182             if individualEdge:
    1183                if len(edge)>=workscan.getif(r):
    1184                   raise RuntimeError, "Number of edge elements appear to be less than the number of IFs"
    1185                   curedge = edge[workscan.getif(r)]
     1186            if individualedge:
     1187                if len(edge) >= workscan.getif(r):
     1188                    raise RuntimeError, "Number of edge elements appear to " \
     1189                                        "be less than the number of IFs"
     1190                    curedge = edge[workscan.getif(r)]
    11861191
    11871192            # setup line finder
    1188             fl.find_lines(r,mask,curedge)
     1193            fl.find_lines(r, mask, curedge)
    11891194            f.set_scan(workscan, fl.get_mask())
    11901195            f.x = workscan._getabcissa(r)
     
    12741279        varlist = vars()
    12751280        s = scantable(self._math._unaryop(self, offset, "ADD", False))
    1276         s._add_history("add",varlist)
     1281        s._add_history("add", varlist)
    12771282        print_log()
    12781283        if insitu:
     
    12811286            return s
    12821287
    1283     def scale(self, factor, tsys=True, insitu=None,):
     1288    def scale(self, factor, tsys=True, insitu=None, ):
    12841289        """
    12851290        Return a scan where all spectra are scaled by the give 'factor'
     
    12961301        varlist = vars()
    12971302        s = scantable(self._math._unaryop(self, factor, "MUL", tsys))
    1298         s._add_history("scale",varlist)
     1303        s._add_history("scale", varlist)
    12991304        print_log()
    13001305        if insitu:
     
    13251330        varlist = vars()
    13261331        s = scantable(self._math._auto_quotient(self, mode, preserve))
    1327         s._add_history("auto_quotient",varlist)
     1332        s._add_history("auto_quotient", varlist)
    13281333        print_log()
    13291334        return s
     
    13461351        varlist = vars()
    13471352        s = scantable(self._math._freqswitch(self))
    1348         s._add_history("freq_switch",varlist)
     1353        s._add_history("freq_switch", varlist)
    13491354        print_log()
    13501355        if insitu: self._assign(s)
     
    14561461        hist += funcname+sep#cdate+sep
    14571462        if parameters.has_key('self'): del parameters['self']
    1458         for k,v in parameters.iteritems():
     1463        for k, v in parameters.iteritems():
    14591464            if type(v) is dict:
    1460                 for k2,v2 in v.iteritems():
     1465                for k2, v2 in v.iteritems():
    14611466                    hist += k2
    14621467                    hist += "="
    1463                     if isinstance(v2,scantable):
     1468                    if isinstance(v2, scantable):
    14641469                        hist += 'scantable'
    14651470                    elif k2 == 'mask':
    1466                         if isinstance(v2,list) or isinstance(v2,tuple):
     1471                        if isinstance(v2, list) or isinstance(v2, tuple):
    14671472                            hist += str(self._zip_mask(v2))
    14681473                        else:
     
    14731478                hist += k
    14741479                hist += "="
    1475                 if isinstance(v,scantable):
     1480                if isinstance(v, scantable):
    14761481                    hist += 'scantable'
    14771482                elif k == 'mask':
    1478                     if isinstance(v,list) or isinstance(v,tuple):
     1483                    if isinstance(v, list) or isinstance(v, tuple):
    14791484                        hist += str(self._zip_mask(v))
    14801485                    else:
     
    14971502            else:
    14981503                j = len(mask)
    1499             segments.append([i,j])
     1504            segments.append([i, j])
    15001505            i = j
    15011506        return segments
     
    15051510        import re
    15061511        lbl = "Intensity"
    1507         if re.match(".K.",fu):
     1512        if re.match(".K.", fu):
    15081513            lbl = "Brightness Temperature "+ fu
    1509         elif re.match(".Jy.",fu):
     1514        elif re.match(".Jy.", fu):
    15101515            lbl = "Flux density "+ fu
    15111516        return lbl
     
    15181523    def _fill(self, names, unit, average):
    15191524        import os
    1520         varlist = vars()
    15211525        from asap._asap import stfiller
    15221526        first = True
     
    15401544            r = stfiller(tbl)
    15411545            msg = "Importing %s..." % (name)
    1542             asaplog.push(msg,False)
     1546            asaplog.push(msg, False)
    15431547            print_log()
    1544             r._open(name,-1,-1)
     1548            r._open(name, -1, -1)
    15451549            r._read()
    15461550            #tbl = r._getdata()
    15471551            if average:
    1548                 tbl = self._math._average((tbl,),(),'NONE','SCAN')
     1552                tbl = self._math._average((tbl, ), (), 'NONE', 'SCAN')
    15491553                #tbl = tbl2
    15501554            if not first:
     
    15531557            Scantable.__init__(self, tbl)
    15541558            r._close()
    1555             del r,tbl
     1559            del r, tbl
    15561560            first = False
    15571561        if unit is not None:
Note: See TracChangeset for help on using the changeset viewer.