def string_to_minimal_int_range()

in dataflux_core/range_splitter.py [0:0]


    def string_to_minimal_int_range(self, start_range: str, end_range: str,
                                    num_splits: int) -> MinimalIntRange:
        """Converts a string range to a minimal integer range.

        Args:
          start_range (str): The string marking the start of the split range.
          end_range (str): The string marking the end of the split range.
          num_splits (int): The number of splitpoints to return.

        Returns:
          A minimal integer range.
        """

        start_int = 0
        end_int = 0

        alphabet_len = len(self.sorted_alphabet)
        start_char = self.sorted_alphabet[0]
        end_char = self.sorted_alphabet[-1]

        end_default_char = start_char
        if len(end_range) == 0:
            end_default_char = end_char

        for i in count(0):
            start_pos = self.alphabet_map[get_char_or_default(
                start_range, i, start_char)]
            start_int *= alphabet_len
            start_int += start_pos

            end_pos = self.alphabet_map[get_char_or_default(
                end_range, i, end_default_char)]
            end_int *= alphabet_len
            end_int += end_pos

            difference = end_int - start_int
            if difference > num_splits:
                # Due to zero indexing, min length must have 1 added to it.
                return MinimalIntRange(start_int, end_int, i + 1)