parameters: (self, dest)
return_statement: return self.__class__(relpath)
docstring: Return a relative path from self to dest.
  
          If there is no relative path from self to dest, for example if
          they reside on different drives in Windows, then this returns
          dest.abspath().
docstring_summary: Return a relative path from self to dest.
docstring_tokens: Return a relative path from self to dest .
function: def relpathto(self, dest):
          """ Return a relative path from self to dest.
  
          If there is no relative path from self to dest, for example if
          they reside on different drives in Windows, then this returns
          dest.abspath().
          """
          origin = self.abspath()
          dest = self.__class__(dest).abspath()
  
          orig_list = origin.normcase().splitall()
          # Don't normcase dest!  We want to preserve the case.
          dest_list = dest.splitall()
  
          if orig_list[0] != os.path.normcase(dest_list[0]):
              # Can't get here from there.
              return dest
  
          # Find the location where the two paths start to differ.
          i = 0
          for start_seg, dest_seg in zip(orig_list, dest_list):
              if start_seg != os.path.normcase(dest_seg):
                  break
              i += 1
  
          # Now i is the point where the two paths diverge.
          # Need a certain number of "os.pardir"s to work up
          # from the origin to the point of divergence.
          segments = [os.pardir] * (len(orig_list) - i)
          # Need to add the diverging part of dest_list.
          segments += dest_list[i:]
          if len(segments) == 0:
              # If they happen to be identical, use os.curdir.
              relpath = os.curdir
          else:
              relpath = os.path.join(*segments)
          return self.__class__(relpath)
function_tokens: def relpathto ( self , dest ) : origin = self . abspath ( ) dest = self . __class__ ( dest ) . abspath ( ) orig_list = origin . normcase ( ) . splitall ( ) # Don't normcase dest!  We want to preserve the case. dest_list = dest . splitall ( ) if orig_list [ 0 ] != os . path . normcase ( dest_list [ 0 ] ) : # Can't get here from there. return dest # Find the location where the two paths start to differ. i = 0 for start_seg , dest_seg in zip ( orig_list , dest_list ) : if start_seg != os . path . normcase ( dest_seg ) : break i += 1 # Now i is the point where the two paths diverge. # Need a certain number of "os.pardir"s to work up # from the origin to the point of divergence. segments = [ os . pardir ] * ( len ( orig_list ) - i ) # Need to add the diverging part of dest_list. segments += dest_list [ i : ] if len ( segments ) == 0 : # If they happen to be identical, use os.curdir. relpath = os . curdir else : relpath = os . path . join ( * segments ) return self . __class__ ( relpath )