This is an archival dump of old wiki content --- see scipy.org for current material

Exercise 1:

    def has_key(self, key):
        if type(key) != type(''):
            raise TypeError
        return dict.has_key(self, key.lower())
    def update(self, odict):
        keys = odict.keys()
        values = odict.values()
        for i in range(len(keys)):
            if type(keys[i]) != type(''):
                raise TypeError
            keys[i] = keys[i].lower()
        for key, value in zip(keys, values):
            self[key] = value
    def get(self, key, value=None):
        if type(key) != type(''):
            raise TypeError
        return dict.get(self, key.lower(), value)
    def setdefault(self, key, value):
        if type(key) != type(''):
            raise TypeError
        return dict.setdefault(self, key.lower(), value)

Exercise 2:

 # Code for transmission function is nearly identical (most of it would be place into
 # functions called by each).

 class TabularSource(SourceFunction):
     def __init__(self, filename, wavecol, fluxcol):
         '''Assumes use of data in FITS table. wavecol and fluxcol are strings
         identifying the columns that contain the wavelengths and fluxes
         '''
         tab = pyfits.getdata(filename)
         self.wave = tab.field(wavecol)
         self.flux = tab.field(fluxcol)
         # could add much error checking (e.g., monotonic wavelengths, etc) 
     def __call__(self, wave):
         '''Use simple linear interpolation'''
         # Error if wave has values outside of tabulated range
         # Following to handle case of wave being a simple scalar
         if type(wave) != type(n.array(0)):
             awave = n.array([wave])
         else:
             awave = wave
         if ((awave.min() < self.wave.min()) or
             (awave.max() > self.wave.max())):
                 print 'wavelengths out of tabulated range'
                 raise ValueError
         return interpolate(self.wave, self.flux, wave)

 def interpolate(xtab, ytab, xsamp):
     # from example in tutorial section 3.7.3
     xind = n.searchsorted(xtab, xsamp)
     xfract = (xsamp-xtab[xind])/(xtab[xind+1]-xtab[xind])
     return ytab[xind] + xfract*(ytab[xind+1]-ytab[xind])

SciPy: TutorialSolutionSet5 (last edited 2015-10-24 17:48:25 by anonymous)