code: def liftover_cpra(self, chromosome, position, verbose=False):
          
  
          chromosome = str(chromosome)
          position = int(position)
  
          # Perform the liftover lookup, shift the position by 1 as pyliftover deals in 0-based co-ords
          new = self.liftover.convert_coordinate(chromosome, position - 1)
          # This has to be here as new will be NoneType when the chromosome doesn't exist in the chainfile
          if new:
              # If the liftover is unique
              if len(new) == 1:
                  # If the liftover hasn't changed strand
                  if new[0][2] == "+":
                      # Set the co-ordinates to the lifted-over ones and write out
                      new_chromosome = str(new[0][0])
                      # Shift the position forward by one to convert back to a 1-based co-ords
                      new_position = int(new[0][1]) + 1
                      return new_chromosome, new_position
                  else:
                      exception_string = "{},{} has a flipped strand in liftover: {}".format(chromosome, position, new)
              else:
                  exception_string = "{},{} lifts over to multiple positions: {}".format(chromosome, position, new)
          elif new is None:
              exception_string = "Chromosome '{}' provided not in chain file".format(chromosome)
  
          if verbose:
              logging.error(exception_string)
          return None, None
docs: Given chromosome, position in 1-based co-ordinates,
          This will use pyliftover to liftover a CPRA, will return a (c,p) tuple or raise NonUniqueLiftover if no unique
          and strand maintaining liftover is possible
          :param chromosome: string with the chromosome as it's represented in the from_genome
          :param position: position on chromosome (will be cast to int)
          :return: ((str) chromosome, (int) position) or None if no liftover