Riemann Sum Class (with variable endpoint behavior)
If something is called "RiemannSum", then it should return a sum. If you want summation to be a separate method, a better term would be "partition"; you could do RiemannPartition.sum(), for instance.

Several other variable names are bit unintuitive to me (e.g. rectangles, index).

You can eliminate several lines by doing:

offset = {'left':0,'right':self.delta,'mid':self.delta/2}[self.endpoints.lower()]
self.points = arange(self.index+offset, self.upper+offset, self.delta)


General tip: if you're doing an if-then with several elif/else clauses, consider whether a dictionary would be simpler.