text: #!/usr/bin/env python
  
  # Copyright (c) 2014 Johns Hopkins University
  # All rights reserved.
  #
  # Redistribution and use in source and binary forms, with or without
  # modification, are permitted provided that the following conditions
  # are met:
  #
  # - Redistributions of source code must retain the above copyright
  #   notice, this list of conditions and the following disclaimer.
  # - Redistributions in binary form must reproduce the above copyright
  #   notice, this list of conditions and the following disclaimer in the
  #   documentation and/or other materials provided with the
  #   distribution.
  # - Neither the name of the copyright holders nor the names of
  #   its contributors may be used to endorse or promote products derived
  #   from this software without specific prior written permission.
  #
  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  # FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
  # THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
  # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  # OF THE POSSIBILITY OF SUCH DAMAGE.
  
  
  def checkSkew(tuples):
      startLocal = min([local for (local, remote) in tuples])
      startRemote = min([remote for (local, remote) in tuples])
      zb = [ (local - startLocal, remote - startRemote) 
        for (local, remote) in tuples]
      print "before sort:", zb
      zb = sorted(zb)
      print "after sort:", zb
      deltas = [ (localR - localL, remoteR - remoteL) 
        for ((localL, remoteL), (localR, remoteR))
        in zip(zb, zb[1:])]
      skews = [ float(dr)/float(dl) for (dl, dr) in deltas]
      avgSkew = sum(skews)/len(skews)
      return (avgSkew, skews)
  